objective-c - 如何将值传递给@protocol

标签 objective-c ios cocoa-touch delegates protocols

我正在尝试实现一个协议(protocol)。

我查看了文档 here我理解这些概念,尽管我认为我遗漏了一些东西。

我正在尝试创建一个 View ,用户点击 TableView 中的文件名,触发“didSelectRowAtIndexPath”,这将通知委托(delegate)用户已选择一个文件(在委托(delegate)中触发 didSelectFileName)并传递文件名。我已声明协议(protocol)如下;

@protocol FileList <NSObject>
- (void)didSelectFileName:(NSString *)fileName;    
@end

我的问题是:

  • 如何设置“fileName”值,以便在调用“didSelectFileName”时它包含当前值
  • 如何告诉我的代码触发委托(delegate)中的“didSelectFileName”。

最佳答案

您不能只向协议(protocol)发送消息(也不能设置值)。您将消息发送到符合协议(protocol)的类。


当您说一个类符合协议(protocol)( @interface MyClass : NSObject <MyProtocol> { etc )时,您可以使用符合协议(protocol)中方法的选择器安全地向该类发送任何消息。

因此,如果我们以您的协议(protocol)为例,我们可以有一个可以向委托(delegate)发送消息的类:

@interface MyClass : NSObject {
  id<FileList> _delegate;
}

@end

@implementation MyClass

- someMethod {
  NSString *fn = @"Hello.";
  [_delegate didSelectFileName:fn];
}

@end

只需确保在委托(delegate)中实现协议(protocol)中的方法即可。

您不需要重新定义委托(delegate)类接口(interface)中的方法。


以下是一些有关协议(protocol)的好读物:

关于objective-c - 如何将值传递给@protocol,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6762023/

相关文章:

iphone - 在 Xcode 中调试时如何打印整数值?

Objective-c类设计/组织

objective-c - 如何模仿 App Store.app UI

ios - 我可以在 semaphore.wait() 主线程上调用吗?

ios - 在通过 NavigationControllerDelegate 进行交互式转换期间隐藏/取消隐藏导航栏的正确方法是什么?

ios - UIViewController 到 UIImagePickerController 到其他 UIViewController

ios - 我已经在自定义 UITableViewCell 类中覆盖了 setHighlight 。但是,我并不总是想使用它。我怎样才能防止它被使用?

objective-c - iOS:将两个值相乘

ios - 在这种情况下如何处理 unarchiver..?

iphone - 如何创建这样的 iOS 界面?