最近读到这个:
其中概述了两个控制器之间的委托设置。我遇到的问题是控制器之间没有segue。而且我不确定我是否要在这两个控制器之间进行切换,即我不想在值更新时更改视图,在幕后我只想让另一个控制器知道值确实发生了变化。
这是我从上面的链接绊倒的步骤:
在我们将 ViewControllerB 推送到导航堆栈之前,我们需要做的最后一件事是告诉 ViewControllerB ViewControllerA 是它的委托。
ViewControllerB *viewControllerB = [[ViewControllerB alloc] initWithNib:@"ViewControllerB" bundle:nil]; viewControllerB.delegate = self [[self navigationController] pushViewController:viewControllerB animated:YES];
我没有使用笔尖,我也不认为为 segue 做准备是连接代表的正确位置。我应该在其他地方给代表接线吗?
这是我的代码:SettingsVeiwController,想让另一个控制器知道用户何时更新刷新率字段。
#import <UIKit/UIKit.h>
@protocol SettingsViewControllerDelegate <NSObject>
-(void) didUpdateRefreshRate:(NSString *)refreshRate;
@end
@interface SettingsViewController : UITableViewController <UITextFieldDelegate>
@property (weak, nonatomic) IBOutlet UITextField *refreshRateTextField;
@property (copy, nonatomic) NSNumber *refreshRate;
@property (weak, nonatomic) id <SettingsViewControllerDelegate> delegate;
@end
MainViewController,想在 refreshRate 变化时获取更新,
@interface MainViewController ()
@end
@implementation MainViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void) didUpdateRefreshRate:(NSString *)refreshRate {
NSLog(@"This was returned from SettingsViewController %@",refreshRate);
}
@end
我认为一切设置正确,除了告诉 SettingsViewController MainViewController 是它的代表。
可能最重要的是这是一个选项卡式应用程序。MainViewController 是一个选项卡,SettingsViewController 是另一个选项卡。使用选项卡式应用程序时可能是设置它的好方法,即如何在选项卡之间传递信息/数据。我假设它通过代表仍然只需要知道在哪里将它们连接在一起。