Делегат в UISplitView не вызывается - PullRequest
0 голосов
/ 07 января 2012

Я настроил методы делегата для связи от моего masterViewController до моего detailViewController, но метод делегата не вызывается.

MasterViewController.h

#import <UIKit/UIKit.h>

@class DetailViewController;
@class MasterViewController;

@protocol MasterViewControllerDelegate
- (void)SelectionChanged:(NSString *)url;
@end

@interface MasterViewController : UITableViewController

@property (nonatomic, weak) id<MasterViewControllerDelegate> delegate;
@property (strong, nonatomic) DetailViewController *detailViewController;

@end

Затем в моем MasterViewController.m я синтезирую делегата:

@synthesize delegate;

И, наконец, я вызываю метод делегата из моего метода didSelectRowAtIndexPath, например, так:my DetailViewController.h У меня есть:

@interface DetailViewController : UIViewController <UISplitViewControllerDelegate, MasterViewControllerDelegate>

А в DetailViewController.m:

- (void)SelectionChanged:(NSString *)url {
    NSLog(@"URL is %@", url);
}

Когда я запускаю приложение, NSLog из SelectionChanged никогда не вызывается, и яне получить ошибок.Есть идеи?

1 Ответ

1 голос
/ 08 января 2012

Хорошо, я понял это ... В своем файле AppDelegate.m я добавил следующее к didFinishLaunchingWithOptions

DetailViewController *detail = (DetailViewController *)navigationController.topViewController;
UINavigationController *masterNavigationController = [splitViewController.viewControllers objectAtIndex:0];
MasterViewController *master = (MasterViewController *)masterNavigationController.topViewController;

NSLog(@"%@",masterNavigationController.topViewController);
master.delegate = detail;

Таким образом, весь метод выглядит так:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
    UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
    splitViewController.delegate = (id)navigationController.topViewController;

    DetailViewController *detail = (DetailViewController *)navigationController.topViewController;
    UINavigationController *masterNavigationController = [splitViewController.viewControllers objectAtIndex:0];
    MasterViewController *master = (MasterViewController *)masterNavigationController.topViewController;

    NSLog(@"%@",masterNavigationController.topViewController);
    master.delegate = detail;

    return YES;
}

По сути, проблема в том, что я нигде не назначал делегата .... Дух.

...