5

重複の可能性:
dismissModalViewControllerANDデータを返す

私はiOS開発に不慣れで、この問題にこだわっています。

私はストーリーボードを使用していて、ナビゲーションコントローラーを持ってvcAいます。これには、(同じクラスで初期化された)TableViewからのデータを表示するが含まれています。セルを選択すると、2番目のView Controllerが表示され、その中に「Addtolist」というボタンが表示されます。MutableArrayviewdidloadvcBTextField

にテキストを入力してTextField[リストに追加]ボタンを押すと、テキストが前のビューの配列(に表示されます)に追加され、'のTableView[戻る]ボタンをタップすると、vcB■ナビゲーションバーには、(リストの上部に)新しいエントリがvcA含まれる更新が表示されます。基本的に、の配列にテキストを追加し、 [戻る]ボタンをクリックした後に新しい配列を表示しTableViewたいと思います。vcBTextFieldvcA

私はこの問題について多くのことを検索し、委任とプロトコルが望ましい結果を達成する方法であることがわかったようですが、委任を理解するのに苦労しています。

4

1 に答える 1

13

この例では、モーダルとして表示されている 2 番目のビュー コントローラーがあります。

2 番目のビュー コントローラーの h ファイルで、次のようにします。

@protocol SecondViewControllerDelegate <NSObject>
- (void)addItemViewController:(id)controller didFinishEnteringItem:(NSString *)item;
@end

@interface SecondPageViewController : UIViewController <UITextViewDelegate>
{
     NSString *previouslyTypedInformation;
}

@property (weak, nonatomic) IBOutlet UITextView *textView;
@property (nonatomic) NSString *previouslyTypedInformation;
@property (nonatomic, weak) id <SecondViewControllerDelegate> delegate;

2番目のView Controllers mファイルで、プロパティを合成して追加してから、これを追加してください:

- (IBAction)done:(id)sender
{
     NSString *itemToPassBack = self.textView.text;
     NSLog(@"returning: %@",itemToPassBack);
     [self.delegate addItemViewController:self didFinishEnteringItem:itemToPassBack];
     //dismiss modal view controller here
}

次に、最初のView Controllerのhファイルで、デリゲートとして設定します:

 @interface FirstPageViewController: UIViewController <SecondViewControllerDelegate>
 @property (nonatomic) NSString *returnedItem;

次に、最初のビュー コントローラーの m ファイルで合成し、メソッドを追加します。

- (void)addItemViewController:(SecondPageViewController *)controller didFinishEnteringItem:    (NSString *)item
{
    //using delegate method, get data back from second page view controller and set it to property declared in here
    NSLog(@"This was returned from secondPageViewController: %@",item);
    self.returnedItem=item;

    //add item to array here and call reload
}

これで、返されたもののテキストができました。最初のView ControllerのviewDidLoadで配列に文字列を追加して呼び出すことができます

[self.tableView reloadData]; 

そしてそれはうまくいくはずです。

于 2012-12-31T21:52:17.457 に答える