我是一名.net 程序员,上周我开始阅读有关objective-c 的内容。类相关的东西有点清楚,今天我了解了协议和委托,我不能说它是 100% 清楚的,但我明白了,它看起来很多来自 c# 的委托和事件。
这是我按照教程创建的一个简单示例。这都是关于 2 个屏幕,第一个(一个标签和一个按钮)启动第二个(一个文本框和一个按钮),它发送回一个字符串。我认为它是使用事件的经典示例,无论是哪种编程语言。
#import <UIKit/UIKit.h>
#import "ValueViewController.h"
@interface ViewController : UIViewController<ValueViewControllerDelegate>
- (IBAction)btnGetValue:(id)sender;
@property (weak, nonatomic) IBOutlet UILabel *lblCurrentValue;
@end
#import "ViewController.h"
#import "ValueViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (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.
}
- (IBAction)btnGetValue:(id)sender {
ValueViewController *valueVC = [self.storyboard instantiateViewControllerWithIdentifier:@"ValueViewController"];
valueVC.delegate=self;
[self presentViewController:valueVC animated:FALSE completion:nil];
}
-(void) sendValue:(ValueViewController *)controller didFihishWithValue:(NSString *)value
{
self.lblCurrentValue.text=value;
}
@end
#import <UIKit/UIKit.h>
@class ValueViewController;
@protocol ValueViewControllerDelegate<NSObject>
-(void) sendValue:(ValueViewController*) controller didFihishWithValue:(NSString*) value;
@end
@interface ValueViewController : UIViewController<UITextFieldDelegate>
@property (weak, nonatomic) IBOutlet UITextField *txtValue;
- (IBAction)btnSetValue:(id)sender;
@property (weak, nonatomic) id<ValueViewControllerDelegate> delegate;
@end
#import "ValueViewController.h"
@interface ValueViewController ()
@end
@implementation ValueViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.txtValue.delegate=self;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
return [textField resignFirstResponder];
}
- (IBAction)btnSetValue:(id)sender
{
[self.delegate sendValue:self didFihishWithValue:self.txtValue.text];
[self dismissViewControllerAnimated:FALSE completion:nil];
}
@end
我的问题如下:考虑一个,比方说,30个屏幕的应用程序,它允许发送和接收消息,添加朋友等,将那些4-5个消息视图控制器分组到故事板中,这些朋友相关的视图控制器是否是一个好方法进入另一个故事板并像我在那个简单示例中那样以编程方式建立连接?
我看到可以在设计器中完成连接而无需编写代码,但有时我认为您必须编写代码来发送一些参数,这意味着将两者混合(以图形方式和编程方式)。我只是觉得更舒服,以编程方式进行,也许是因为我在 C# 中就是这样做的。
我期待您提供有关在屏幕之间组织和建立连接的提示。
PS:很抱歉在这里写了这么长的故事(板),我保证在我的后续帖子中将其缩短。
谢谢。