如何将故事板按钮连接到不同 viewController 中的方法
How to connect a storyboard button to a method in a different viewController
我的故事板有一个 viewController NEWvc。它需要调用viewController OLDvc 中的一堆方法。
最初,我将 OLDvc 作为 属性 添加到 NEWvc 上,并在 NEWvc 上创建了调用 OLDvc 上的选择器的方法。必须有更好的方法将我的故事板中的 link 按钮直接连接到 OLDvc。
我可以添加一个对象并将其变成 OLDvc 的实例,但我需要它是已经存在的实例,而不是新实例。我需要对 OLDvc 实例的引用。
我该怎么做?
首先我想告诉大家,将 ViewController 命名为 NEWvc 不遵循任何苹果编码标准。可以是 NewVC 以获得更好的可读性。
使它们 class 方法成为您想要从另一个 ViewController 调用的方法。
然后使用 class 名称调用
正在创建 Class 方法
Replace - with + prefix to your methods
调用示例[=24=]
[ClassName yourMethod];
您可以定义一个协议,其中包含 newVC 将在 oldVC 上调用的方法:
@protocol MyProtocol
- (void)doSomethingOnOldVC;
@end
然后让你的 oldVC 实现所需的方法:
@interface OldVC : UIViewControler <MyProtocol>
@end
@implementation OldVC
- (void)doSomethingOnOldVC
{
NSLog(@"Something happened.");
}
当你展示你的 newVC 时,你应该向它提供 oldVC 的实例并将其存储为弱 属性:
@interface NewVC : UIViewController
@property (nonatomic, weak) id<MyProtocol> myDelegate;
@end
...
在旧 VC 中:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NewVC *newVC = sender.destinationViewController;
newVC.myDelegate = self;
}
然后您可以从 newVC 中的任何地方调用委托方法。
我的故事板有一个 viewController NEWvc。它需要调用viewController OLDvc 中的一堆方法。
最初,我将 OLDvc 作为 属性 添加到 NEWvc 上,并在 NEWvc 上创建了调用 OLDvc 上的选择器的方法。必须有更好的方法将我的故事板中的 link 按钮直接连接到 OLDvc。
我可以添加一个对象并将其变成 OLDvc 的实例,但我需要它是已经存在的实例,而不是新实例。我需要对 OLDvc 实例的引用。
我该怎么做?
首先我想告诉大家,将 ViewController 命名为 NEWvc 不遵循任何苹果编码标准。可以是 NewVC 以获得更好的可读性。
使它们 class 方法成为您想要从另一个 ViewController 调用的方法。
然后使用 class 名称调用
正在创建 Class 方法
Replace - with + prefix to your methods
调用示例[=24=]
[ClassName yourMethod];
您可以定义一个协议,其中包含 newVC 将在 oldVC 上调用的方法:
@protocol MyProtocol
- (void)doSomethingOnOldVC;
@end
然后让你的 oldVC 实现所需的方法:
@interface OldVC : UIViewControler <MyProtocol>
@end
@implementation OldVC
- (void)doSomethingOnOldVC
{
NSLog(@"Something happened.");
}
当你展示你的 newVC 时,你应该向它提供 oldVC 的实例并将其存储为弱 属性:
@interface NewVC : UIViewController
@property (nonatomic, weak) id<MyProtocol> myDelegate;
@end
...
在旧 VC 中:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NewVC *newVC = sender.destinationViewController;
newVC.myDelegate = self;
}
然后您可以从 newVC 中的任何地方调用委托方法。