我是.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:很抱歉在这里写了这么长的故事(董事会),我保证在以下帖子中缩短它。
感谢。
答案 0 :(得分:0)
制作两个相互通信的故事板会违背预期的流程,因为故事板不是用于分组应用程序的一部分。虽然一个应用可能肯定有多个故事板,但允许多个故事板背后的意图是让你支持不同的屏幕范例(即iPhone与iPad)或不同的本地化,而不是将相关的屏幕分组在一起。
但请注意,故事板相对较新。您可以在NIB文件中定义视图,并使用它们。这种选择的一个不幸后果是您需要以编程方式建立所有连接,但另一方面,您可以使用文件组或文件夹将视图分组到Xcode项目中。