0

マスター ビュー アプリケーションでは、xcode はテーブル ビューとプラス ボタンを備えた準備完了のアプリを生成します。そのボタンを変更して新しいセルを追加したいのですが、デフォルトの日付ではありません。label->textfield、label->textfield のような 2 つのテキスト フィールドを追加したいと考えています。

コードで私はこれを持っています:

- (void)viewDidLoad{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.navigationItem.leftBarButtonItem = self.editButtonItem;
    UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self     action:@selector(insertNewObject:)];
    self.navigationItem.rightBarButtonItem = addButton;
    self.detailViewController = (GCDetailViewController *) [[self.splitViewController.viewControllers lastObject] topViewController];
}  

そして機能:

- (void)insertNewObject:(id)sender{    
    if (!_objects) {
        _objects = [[NSMutableArray alloc] init];
    }    
    [_objects insertObject:[UITextField alloc] atIndex:0];
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
    [self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; 

ありがとうございました

4

2 に答える 2

0

これを考える方法が、モデル ビュー コントローラー (MVC) です。 _objectsユーザーがテーブルにあると思うものを表すモデルです。やることリストだとすると、オブジェクトは、TodoItem のように作成した NSObject サブクラスの配列である可能性があります。

新しい TodoItems を に挿入し_objects、モデルが変更されたことをテーブル (MVC の「ビュー」) に伝えます。を使用して不正確に行うこともreloadData、コードが示唆するようにより的を絞った方法で呼び出すこともできinsertRowsAtIndexPathsますが、その呼び出しは tableViewbeginUpdatesとの間に挟む必要がありendUpdatesます。

cellForRowAtIndexPathのコード、またはストーリーボードのセル プロトタイプにtextFields を追加できます。テーブルビューのデータソースは常にオブジェクトを参照する必要があります...つまり、numberOfRows回答self.objects.countcellForRowAtIndexPath取得:

TodoItem *item = [self.objects objectAtIndexPath:indexPath.row];

その項目のプロパティを使用して、textField のテキストを初期化します。また、オブジェクトは次のように宣言する必要があります。

@property(strong,nonatomic) NSMutableArray *objects;

...そして、コードはself.objectsほぼすべての場所を参照する必要があります (_objects ではありません)。テーブルが表示されたらすぐに有効にする必要があるため、最初の挿入で初期化するのは遅すぎます。通常、合成されたゲッターを「怠惰な」init に置き換えることをお勧めします...

- (NSMutableArray *)objects {

    if (!_objects) {    // this one of just a few places where you should refer directly to the _objects
        _objects = [NSMutableArray array];
    }
    return _objects;
}
于 2013-03-30T16:34:45.907 に答える