我是一位.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:對不起,在這裏寫這麼長的故事(板),我保證把它縮短在我以下的帖子。
謝謝。
從我所瞭解的NIB文件已經過時,故事板是要走的路。 – user2611691
@ user2611691不,NIB不會過時。他們甚至沒有棄用,我不明白他們如何或爲什麼會被拒絕([link](http://stackoverflow.com/a/8495940/335858))。 – dasblinkenlight
這清楚地表明,豆粒不會被棄用,對於那些30-40屏幕,都可以在一個單一的故事板,是不是太多了? – user2611691