UISplitViewController内两个视图控制器之间的通信

时间:2013-09-16 14:07:24

标签: ios ipad delegates uisplitviewcontroller master-detail

我很难在UISplitViewController内的两个视图控制器之间传递数据。我正在关注this 教程。我能够在主视图和详细视图上创建一个带有UITableViews的拆分视图控制器。现在,我真正想要的是当我点击主表中的特定行时,它必须向详细信息视图发送一些值。

我正在玩一个自定义委托,将一些值从一个视图控制器传递到另一个视图控制器,以查看它们之间是否存在任何通信,但似乎没有任何工作方式。

在MasterTableView.h中

@protocol sendingProtocol <NSObject>

-(void)passSomeValue:(NSString *)someValue;

@end



@interface MasterTableView : UITableViewController
{
    NSArray *menuArray;
    id<sendingProtocol>delegate;
}

@property (nonatomic,assign) id<sendingProtocol>mydelegate;

@end

在.m文件中合成。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [[self mydelegate] passSomeValue:@"Some Value"];
}

在DetailTableView.h中

-(void)passSomeValue:(NSString *)someValue
{
    NSLog(@"%@", someValue);
}

请注意我在ViewDidLoad方法中调用mydelegate。这是写方式吗?有人可以帮忙吗?

- (void)viewDidLoad
{
    [super viewDidLoad];
    MasterTableView *masterView = [[MasterTableView alloc] init];
    masterView.mydelegate = self;
}

提前谢谢!

1 个答案:

答案 0 :(得分:1)

viewDidLoad的{​​{1}}方法中,您不应该创建新的DetailTableView对象。错误在于此方法:

MasterTableView

您正在创建- (void)viewDidLoad { [super viewDidLoad]; MasterTableView *masterView = [[MasterTableView alloc] init]; masterView.mydelegate = self; } 的另一个对象,并将其委托设置为self,因此存在所有问题。

要将MasterTableView的委托设置为MasterTableView,请转到DetailTableView。您必须在AppDelegate中定义AppDelegate.hMasterTableView对象。

DetailTableView