私はルイス・エスピノーザのアプローチが好きですが、それは質問自体には答えません。
アプリ デリゲートの rootViewController である UINavigationController 内にネストされた UITableViewController 内のメソッドを呼び出す場合。まず、UITableViewController (またはサブクラス) で navigationController を作成します。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
CustomTableViewController *nuTableVC = [[CustomTableViewController alloc] initWithStyle:UITableViewStylePlain];
UINavigationController *nuNavController = [[UINavigationController alloc] initWithRootViewController:nuTableVC];
self.window.rootViewController = nuNavController;
[self.window makeKeyAndVisible];
return YES;
}
次に、UITableViewController (またはサブクラス) で、尋ねたように refreshcontrol をセットアップします。
- (void)viewDidLoad {
[super viewDidLoad];
// Add Refresh Control
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:[[UIApplication sharedApplication] delegate]
action:@selector(forceDownload)
forControlEvents:UIControlEventValueChanged];
self.refreshControl = refreshControl;
}
最後に UItableViewController にアクセスするには、インスタンスが本当に必要なクラスであるかどうかを確認する必要があります。これは、 App Delegateで作成したメソッド ( forceDownload )の実装です。
- (void)forceDownload {
NSLog(@"force download method in App Delegate");
UINavigationController *someNavController = (UINavigationController*)[_window rootViewController];
UIViewController *vcInNavController = [[someNavController viewControllers] objectAtIndex:0];
if ([vcInNavController isKindOfClass:[CustomTableViewController class]]) {
NSLog(@"it is my custom Table VC");
NSLog(@"here we can stop the refresh control, or whatever we want");
CustomTableViewController *customTableVC = (CustomTableViewController *)vcInNavController;
[customTableVC.refreshControl performSelector:@selector(endRefreshing)
withObject:nil
afterDelay:1.0f];
}
}
私は個人的には NSNotificationCenter を使用する方が簡単であることを好みますが、それは、最初に計画した方法でオブジェクトにアクセスできないという意味ではありません。
(サンプルコードが必要な場合は、それを求めてください)。
よろしく。