gpt4 book ai didi

ios - UISplitViewController 中两个 View Controller 之间的通信

转载 作者:行者123 更新时间:2023-11-29 13:05:10 35 4
gpt4 key购买 nike

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

我只是在玩弄一个自定义委托(delegate),将一些值从一个 View Controller 传递到另一个 View Controller ,以查看它们之间是否存在任何通信,但似乎没有任何效果。

在 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;
}

提前致谢!

最佳答案

DetailTableViewviewDidLoad 方法中,您不应创建新的 MasterTableView 对象。这个方法的错误在这里:

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

您正在创建 MasterTableView 的另一个对象并将其委托(delegate)设置为 self,因此所有的问题都是如此。

要将 MasterTableView 的委托(delegate)设置为 DetailTableView,请转到 AppDelegate.h。您必须在 AppDelegate 中定义了 MasterTableViewDetailTableView 对象。

 //Set the DetailTableView as the master's delegate.
self.masterTableView.delegate = self.detailTabelView;

关于ios - UISplitViewController 中两个 View Controller 之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18830068/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com