1

私は .net プログラマーで、先週、objective-c について読み始めました。クラス関連のものは少し明確で、今日はプロトコルとデリゲートについて学びました。100% 明確とは言えませんが、わかりました。C# のデリゲートとイベントによく似ています。

これは、チュートリアルに従って作成した簡単な例です。それはすべて約2つの画面であり、最初の画面(ラベルとボタン)が文字列を送り返す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: ここに長い話を書いてすみません。

ありがとう。

4

1 に答える 1

0

互いに通信する 2 つのストーリーボードを作成すると、意図したフローに反することになります。ストーリーボードは、アプリケーションのパーツをグループ化するためのものではないためです。アプリには間違いなく複数のストーリーボードがありますが、複数のストーリーボードを許可することの背後にある意図は、関連する画面をグループ化するのではなく、さまざまな画面パラダイム (つまり、iPhone と iPad) またはさまざまなローカリゼーションをサポートできるようにすることでした。

ただし、ストーリーボードは比較的新しいことに注意してください。ビューを NIB ファイルで定義し、代わりに使用することができます。この選択の残念な結果は、すべての接続をプログラムで作成する必要があることですが、その一方で、ファイル グループまたはフォルダーを使用して、Xcode プロジェクト内でビューをグループ化することができます。

于 2013-07-23T18:34:59.137 に答える