iPhone - едно ниво нагоре в TabBar и извикване на метод

Имам NavBar, TabBar и SearchBar с ScopeBar. Така че потребителят може да извърши търсене чрез отдалечен сървър. При щракване върху един TableRow на TableView се вкарва нов ViewController с xib.

Прави някои изчисления и е възможно да трябва да отхвърля този изглед (контролер) и да се върна назад, сякаш щраквам върху бутона „назад“ в NavBar.

Как мога да направя това програмно и да извикам метод в този ViewController, защото трябва да задействам търсенето със запазения термин за търсене.

някой знае ли това

Благодаря много предварително и най-добри пожелания.


person Tim    schedule 10.01.2010    source източник


Отговори (3)


- (UIViewController *)popViewControllerAnimated:(BOOL)animated

ако вие сте

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
person CiNN    schedule 10.01.2010
comment
Използвам това: [self.myNavigationController popViewControllerAnimated:YES]; И работи. Но как мога да задействам търсене? Или трябва да симулирам щракване върху бутона за търсене на клавиатурата, или трябва да извикам метод, който търси повторно. Или трябва да изтрия този специален TableRow, от който се върнах. - person Tim; 11.01.2010

Използвайте делегиране. Накарайте контролера за изглед на таблица да създаде вашия нов контролер за изглед newViewController и да зададе newViewController.delegate = self, преди да го поставите в стека за навигация.

След това в newViewController, точно преди да popViewControllerAnimated: извикайте някакъв метод като [delegate doWhateverWhenNewViewControllerIsPopped: ...]. В идеалния случай декларирате протокол, наречен нещо като NewViewControllerDelegate и накарате контролера по-горе да го внедри.

Можете да промените бутона за връщане назад на NewViewController на нещо като „Готово“ или каквото и да е, като промените левия му бутон за навигация. (Вижте свойствата на UIViewController.)

Надявам се, че има смисъл.

person Nimrod    schedule 11.01.2010
comment
Хм, имам TestDetailViewController *testDetailViewController = [[TestDetailViewController alloc] initWithNibName:@TestDetailView bundle:[NSBundle mainBundle]]; testDetailViewController.title = testClass.name; testDetailViewController.userKey = testClass.keyId; testDetailViewController.delegate = себе си; Редът с делегата показва грешката: Заявка за член „делегат“ в нещо, което не е структура или съюз. - person Tim; 11.01.2010
comment
По подразбиране няма свойство на делегат. Уверете се, че сте декларирали свойство за делегат в TestDetailViewController. В идеалния случай той трябва да бъде от тип id ‹TestDetailViewDelegate›, така че всеки обект, който имплементира протокола TestDetailViewDelegae, да може да бъде назначен за делегиране. Протоколът може да съдържа само един метод като testDetailViewControllerDone: ... - person Nimrod; 11.01.2010
comment
Имам това в моята декларация: ‹MKMapViewDelegate,MKReverseGeocoderDelegate›, така че реших, че трябва да е наред. Тъй като този изходен код работеше самостоятелно. Интегрирах в съществуващ проект и сега той вече не работи. - person Tim; 11.01.2010
comment
Реших го: Това беше грешният свързан изглед! Свързвам го към изгледа вместо към картата. Много благодаря за твоята помощ! - person Tim; 11.01.2010

Реших проблема, вижте коментарите.

person Tim    schedule 12.01.2010