iOS:从UITabBar/UINavigationController应用程序的视图中设置笔尖子视图中的文本



我在通过另一个视图加载视图时以编程方式设置 UISearchDisplay 的文本值时遇到问题,我的问题是我的问题是否过于复杂并错过了一些东西,或者我是否在正确的思维轨道上。

情况是这样的:我有一个UITabBarController作为我的根视图,有2个选项卡,两者都有一个UINavigationController设置,所以我可以根据需要推送视图。

选项卡 1 有一个 UITableViewController,其中填充了类别列表。

选项卡 2 在其主视图中有一个 MapView,但我做了一个自定义的 UINavigationItem 视图,将各种按钮和一个 UISearchDisplay 放在右侧的 BarButtonitem 区域。

地图视图布局和自定义导航项目与两个单独的视图对象存储在同一笔尖中。 在选项卡 2 的 viewDidLoad() 中,我用编程方式初始化 rightBarButtonItem:

UIBarButtonItem *btnItem = [[UIBarButtonItem alloc] initWithCustomView:buttonBar];
self.navigationItem.rightBarButtonItem = btnItem;
[btnItem release];

一切都启动了,按钮栏连接到IBOutlet作为searchWhat,我可以从mapview的控制器类中与这个对象交谈。

如果用户在选项卡 1 中并点击一个单元格,我希望它切换到选项卡 2 并填充 searchWhat.text,然后执行搜索代码,就像有人自己输入搜索一样。

我遇到的问题是加载顺序并在视图上填充。

我可以毫无问题地从第一个选项卡访问第二个选项卡,并让它显示如下内容:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"Quick Category cell tapped at row %d", indexPath.row);    
    self.tabBarController.selectedIndex = 1; // change to the search view controller
    //[self.tabBarController.selectedViewController viewDidAppear:YES];
    UINavigationController *nav = (UINavigationController *)self.tabBarController.selectedViewController;
    SearchViewController *srch = [nav.viewControllers objectAtIndex:0];
    //NSLog(@"%@", [srch description]);
    [srch queueSearchByType:kSearchTypeQuickCategories withData:[catList objectAtIndex:indexPath.row]];
    [srch viewDidAppear:YES];
}

不用担心catList和SearchViewController,它们存在,并且此位可以切换选项卡。

问题是,如果用户启动应用程序并在选项卡 1 中选择一个项目,则会出现选项卡 2,但搜索显示文本的值未设置——因为 viewDidLoad 和 viewDidAppear 是在另一个线程中调用的,因此在视图仍在加载和设置时调用 queueSearchByType:withData: 的执行。

如果用户选择选项卡 2(因此初始化子视图),然后选择选项卡 1 和项目,则可以填充搜索显示文本。

我不能只是更改选项卡的顺序,以便tab2是第一个,因此将其子视图加载到导航栏,因为项目规范首先是类别搜索。

我错过了一些非常简单的东西吗? 我需要做的是在调用 queueSearchByType:withData 之前等待第二个选项卡完全出现: - 有没有办法做到这一点?

目前,我已经实现了队列搜索,

检查队列搜索方法,这似乎有点冗长。

好的,我不喜欢回答我自己的问题,但看起来我的担忧是正确的,基本上如果你想要一个自定义视图的 UINavigationItem(即,在导航控制器上放置搜索栏和各种其他按钮)并能够从标签栏控制器上的另一个选项卡切换到和填充它们, 然后你需要把子视图放在它自己的类中,这是UIViewController的一个子类,然后让委托成为你的朋友(它已经是了),我提供了一个例子,以防有人需要重复它,我已经放在我的博客上了这里。

http://www.jamesrbrindle.com/developer/ios-developer/howto-add-a-custom-uinavigationitem-to-a-uinavigationcontroller-with-delegation.htm

如果有人不同意并认为这可以更简单,请让我知道或评价这篇文章

最新更新