UISplitViewController 中两个视图控制器之间的通信
Posted
技术标签:
【中文标题】UISplitViewController 中两个视图控制器之间的通信【英文标题】:Communication Between Two View Controllers inside UISplitViewController 【发布时间】:2013-09-16 14:07:24 【问题描述】:我很难在 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;
提前谢谢你!
【问题讨论】:
***.com/questions/8031238/…可能重复 @Puneet 在发布此问题之前,我已经解决了这个问题。 Ray Wanderlich 的教程使用 Storyboard,但我只是使用 Xib。互联网上的很多教程都使用故事板。感谢您的帮助。 查看this answer!它可能会给你一些见解。 【参考方案1】:在DetailTableView
的viewDidLoad
方法中,您不应创建新的MasterTableView
对象。这个方法的错误就在这里:
- (void)viewDidLoad
[super viewDidLoad];
MasterTableView *masterView = [[MasterTableView alloc] init];
masterView.mydelegate = self;
您正在创建另一个 MasterTableView
对象并将其委托设置为 self ,因此所有问题。
要将MasterTableView
的代理设置为DetailTableView
,请转到AppDelegate.h
。您必须在 AppDelegate 中定义了 MasterTableView
和 DetailTableView
对象。
//Set the DetailTableView as the master's delegate.
self.masterTableView.delegate = self.detailTabelView;
【讨论】:
我已经按照你的建议做了。还是没有运气! :( 我有我的自定义委托在我的其他控制器上工作。这似乎并不只在 UISplitview 上工作。有什么相关性吗?在 ViewDidLoad 中设置委托好吗?因为这些主视图控制器和细节视图控制器似乎同时在 UISplitView 中加载。它有什么影响吗?谢谢。 我无法让委托工作,但我使用 NotificationCenter 来完成工作。现在,一切都好。我真的很感谢你的帮助。 +1 非常感谢! 您尝试编辑了吗?尽管通知也可以帮助您,但此任务最好由代表处理。以上是关于UISplitViewController 中两个视图控制器之间的通信的主要内容,如果未能解决你的问题,请参考以下文章
将 UIToolBar 放在 UISplitViewController 上方?
SwiftUI 中的 UISplitViewController 等价物是啥