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】:

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

- (void)viewDidLoad

    [super viewDidLoad];
    MasterTableView *masterView = [[MasterTableView alloc] init];
    masterView.mydelegate = self;

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

要将MasterTableView 的代理设置为DetailTableView,请转到AppDelegate.h。您必须在 AppDelegate 中定义了 MasterTableViewDetailTableView 对象。

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

【讨论】:

我已经按照你的建议做了。还是没有运气! :( 我有我的自定义委托在我的其他控制器上工作。这似乎并不只在 UISplitview 上工作。有什么相关性吗?在 ViewDidLoad 中设置委托好吗?因为这些主视图控制器和细节视图控制器似乎同时在 UISplitView 中加载。它有什么影响吗?谢谢。 我无法让委托工作,但我使用 NotificationCenter 来完成工作。现在,一切都好。我真的很感谢你的帮助。 +1 非常感谢! 您尝试编辑了吗?尽管通知也可以帮助您,但此任务最好由代表处理。

以上是关于UISplitViewController 中两个视图控制器之间的通信的主要内容,如果未能解决你的问题,请参考以下文章

UISplitViewController 一致分隔符

在 UISplitViewController 中编辑事件

将 UIToolBar 放在 UISplitViewController 上方?

SwiftUI 中的 UISplitViewController 等价物是啥

在弹出窗口中显示 UISplitViewController

UISplitViewController - 并排或纵向叠加