ske*_*eg0 0 objective-c uitabbarcontroller uitableview uinavigationcontroller appdelegate
我试图在一个uitableview中访问一个刷新控制方法,该方法位于导航控制器内部,这是一个tabbarcontroller,这是我的根,但我很难得到一个精确的句柄.
这是我到目前为止在AppDelegate中的代码,但它不起作用...
UITableViewController *tableView = (UITableViewController *)[[self.tabbarController viewControllers][0] tableView];
[tableView.refreshControl beginRefreshing];
Run Code Online (Sandbox Code Playgroud)
我有5个标签栏项目,我相信我可以通过[0],[1],[2],[3]和我在UITableView中的代码访问(尽管可能无关紧要)...
// Add Refresh Control
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:appDelegate action:@selector(forceDownload) forControlEvents:UIControlEventValueChanged];
self.refreshControl = refreshControl;
[refreshControl release];
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激,因为我无法找到任何在线访问这么深的.
如果您需要在不相关的对象之间进行通信,我认为最好的选择是使用NSNotifications.这允许您使用单例对象[NSNotificationCenter defaultCenter],将通知从一个对象传递到另一个对象(或许多其他对象).
因此,您可以将AppDelegate对象(或其他对象)观察到特定通知,然后在需要刷新控件时使用tableviewController发布通知.
在app delegate类中,您可以添加以下观察者:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(forceDownload)
name:@"ForceDownloadNotification"
object:nil];
Run Code Online (Sandbox Code Playgroud)
并且,在tableviewController中,您可以发布de通知,如:
[[NSNotificationCenter defaultCenter] postNotificationName:@"ForceDownloadNotification"
object:self];
Run Code Online (Sandbox Code Playgroud)
在这里,我使用名称"ForceDownloadNotification"作为通知的名称.您可以使用所需的名称,但为了使此解决方案正常工作,您必须在开始观察时和发布通知时使用相同的名称.
这里有一个关于这个主题的教程.
| 归档时间: |
|
| 查看次数: |
858 次 |
| 最近记录: |