这是连接屏幕的正确方法吗?

时间:2013-07-23 18:25:09

标签: objective-c

我是.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:很抱歉在这里写了这么长的故事(董事会),我保证在以下帖子中缩短它。

感谢。

1 个答案:

答案 0 :(得分:0)

制作两个相互通信的故事板会违背预期的流程,因为故事板不是用于分组应用程序的一部分。虽然一个应用可能肯定有多个故事板,但允许多个故事板背后的意图是让你支持不同的屏幕范例(即iPhone与iPad)或不同的本地化,而不是将相关的屏幕分组在一起。

但请注意,故事板相对较新。您可以在NIB文件中定义视图,并使用它们。这种选择的一个不幸后果是您需要以编程方式建立所有连接,但另一方面,您可以使用文件组或文件夹将视图分组到Xcode项目中。