ios - 与导航 Controller 的协议(protocol)

标签 ios objective-c iphone uinavigationcontroller protocols

我有一个项目,我在其中设置了一个协议(protocol)以将信息从一个 TableViewController 传回 ViewController。一切工作正常且符合预期,但我决定将导航 Controller 嵌入到 TableViewController 中,以便我可以添加一个“DONE”barButtonItem 以在用户完成时关闭 Controller 。由于嵌入在导航 Controller 中,该按钮运行良好,TablieViewController 看起来相同,但使用协议(protocol)和委托(delegate)的功能和方法都不起作用,如果我删除 NavigationController,一切都会正常。有人可以解释一下我该如何解决这个问题吗?我对 iOS 和 Objective c 相当陌生。

这里是NoteViewController中的prepareForSegue方法

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.destinationViewController isKindOfClass:[ToolTableViewController class]]) {
    ToolTableViewController *targetVC = segue.destinationViewController;
    targetVC.toolDelegate = self;
    targetVC.autoCorrectIsOn = self.autoCorrectIsOn;
    targetVC.undoAvailable = self.undoAvailable;
    targetVC.redoAvailable = self.redoAvailable;
}

ToolTableViewController.h

@protocol ToolTableViewControllerDelegate <NSObject>                              
@property (weak, nonatomic) id <ToolTableViewControllerDelegate> toolDelegate;

ToolTableViewController.m - 调用方法的示例

-(void)clearInputText{
//    NSLog(@"Clear Method Selected");
[self.toolDelegate didClearInputText];

NoteViewController.m

-(void)didClearInputText{
self.noteTextView.text = @"";
[self dismissViewControllerAnimated:YES completion:nil];

最佳答案

由于您的 TableView Controller 嵌入在导航 Controller 中,因此导航 Controller 将成为 segue 的目标 View Controller 。此外,最好为 if 语句使用 segue 的标识符,而不是目标 View Controller 的类(我使用“SegueToTable”作为标识符,将其更改为您为标识符设置的任何内容)。因此,prepareForSegue 应该是这样的,

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"SegueToTable"]) {
        UINavigationController *nav = segue.destinationViewController;
        ToolTableViewController *targetVC = nav.topViewController;
        targetVC.toolDelegate = self;
        targetVC.autoCorrectIsOn = self.autoCorrectIsOn;
        targetVC.undoAvailable = self.undoAvailable;
        targetVC.redoAvailable = self.redoAvailable;
    }

关于ios - 与导航 Controller 的协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28269437/

相关文章:

image - iPad 工具栏图标 : bar button images not centered?

android - 已发送 FCM 消息的状态

iphone - 自定义委托(delegate)和数据源的问题

ios - iTunes Store 拒绝 114x114 图标

ios - 什么构成了 iPhone 应用程序中的私有(private) API?

iphone - 渐变纹理背景

ios - 如何在两个 UIViewControllers 上工作,一个在 swift 中,另一个在 objective-c 中..?

objective-c - 在 Objective-C 上初始化实例变量

ios - 带有发布build设置的 Swift 动画完成错误

iphone - ARC 下紧密循环中 UIKit 的内存管理