0

ストーリーボードには2つのシーンがあります。画像(新規ユーザー)のアップロードは許可されていないので、シーン1とシーン2と呼びましょう。

シーン1:UILabelを含むUITableViewCell。このセルを選択すると、シーン2に移動します。
シーン2:UITableViewで選択するオプションをユーザーに提供します。オプションを選択すると、選択したUITableViewCellの横にチェックマークが付きます。

シーン2の[保存]ボタンをクリックすると、シーン2で選択したUITableViewCellからテキストが取得され、ユーザーがシーン1に戻り、UILabelにシーン2のテキストが入力されます。

ストーリーボードを使用してUITableViewsを作成しました。各セルには独自のクラスがあります。ありがとう。

4

1 に答える 1

1

デリゲート デザイン パターンを使用して、2 つのオブジェクトが相互に通信できるようにします ( Apple リファレンス)。

一般に:

  1. シーン 2 でデリゲートというプロパティを作成します。
  2. シーン 2 デリゲートが定義する必要があるメソッドを定義するシーン 2 のプロトコルを作成します。
  3. シーン 1 からシーン 2 へのセグエの前に、シーン 1 をシーン 2 のデリゲートとして設定します。
  4. シーン 2 でセルが選択されたら、シーン 2 のデリゲートにメッセージを送信して、デリゲートに選択を通知します。
  5. デリゲートが選択を処理できるようにし、選択が行われた後にシーン 2 を閉じます。

そして例として:

シーン 2 インターフェース

@class LabelSelectionTableViewController

@protocol LabelSelectionTableViewControllerDelegate
  - (void)labelSelectionTableViewController:(LabelSelectionTableViewController *)labelSelectionTableViewController didSelectOption:(NSString *)option;
@end

@interface LabelSelectionTableViewController : UITableViewController
  @property (nonatomic, strong) id <LabelSelectionTableViewControllerDelegate> delegate;
@end

シーン 2 の実装

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
  UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];   
  [self.delegate labelSelectionTableViewController:self didSelectOption:cell.textLabel.text];
}

シーン 1 の実装

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
  if ([segue.destinationViewController isKindOfClass:[LabelSelectionTableViewController class]] == YES)
  {
    ((LabelSelectionTableViewController *)segue.destinationViewController).delegate = self;
  }
}

// a selection was made in scene 2
- (void)labelSelectionTableViewController:(LabelSelectionTableViewController *)labelSelectionTableViewController didSelectOption:(NSString *)option
{
  // update the model based on the option selected, if any    
  [self dismissViewControllerAnimated:YES completion:nil];
}
于 2012-12-31T16:31:25.397 に答える