2009-05-25 16 views
7

私の編集ボタンは、のviewDidLoadに配置されていますeditButtonItemは設定されていますが、マイナスボタンはありませんか?

self.navigationItem.rightBarButtonItem = self.editButtonItem; 

それは、ナビゲーションバーの上に正しく示しており、実際にこのボタンをタップすると、完了に変更します。ただし、マイナスボタンはテーブル行に表示されません。行をスワイプして[削除する]をタップします。

アイデア?

EDIT 1:は、ここで私がやっている方法は次のとおりです。

- (void)loadView { 
tableView = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
tableView.delegate = self; 
tableView.dataSource = self; 
tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 

self.view = tableView; 
} 

EDIT 2:私の観察は私のテーブルビューは、IB(RootViewController)で作成されている場合、編集、マイナスボタンが細かい表示されていることです。他の2つ(または3つ)のテーブルビューは上記のコードによって作成されるため、問題が発生する可能性があります。私はisEditing、編集などに飛び込まなければならないと思う。

+1

何をオーバーロードしていますか?それは単純なol 'UITableViewControllerですか?あなたのUITableViewCellsは何か変なことをしていますか(サブクラス化されているかどうか)?編集可能な行の型を返すときに、View Controllerで面白いことをしていますか? –

+0

ええ、それは単なる普通の 'UITableViewControllerです。私はいくつかのコードを追加して自分の投稿を明確にしたいと思う。 –

答えて

11

愚かな私。 UIViewController(私のView Controllerから継承するクラス)をUITableViewControllerに変更するのを忘れました。さて、それは動作します。

これを実行しないと、私は次のように手動で行編集を有効にする必要があります:あなたはのUITableViewControllerのサブクラスを作成していない場合は

// in loadView 
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(turnOnEditing)]; 

- (void)turnOnEditing { 
[self.navigationItem.rightBarButtonItem release]; 
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(turnOffEditing)]; 
[self.tableView setEditing:YES animated:YES]; 
} 

- (void)turnOffEditing { 
[self.navigationItem.rightBarButtonItem release]; 
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(turnOnEditing)]; 
[self.tableView setEditing:NO animated:YES]; 
} 
0

おそらく実行する必要があります。

self.tableView = tableView; 

あなたloadView方法で。これはUITableViewControllerが操作するプロパティで、NIBからビューをロードする場合は自動的に設定されます。プログラムでビューを作成するので、明示的に設定する必要があります。

+0

これを行う必要はありません。覚えておくべき最も重要なことは、親クラスをUIViewControllerからUITableViewControllerに変更することです。 –

38

、それを行うための方法があります。次のようにあなたのUIViewControllerのサブクラスで:アニメーション:ちょうどsetEditingを実装

- (void) setEditing:(BOOL)editing animated:(BOOL)animated { 
    [super setEditing: editing animated: animated]; 
    [self.tableView setEditing:editing animated:animated]; 
} 

注:必要に応じて "self.tableView" を置き換える...

はまた、ツールバーbuttonto "編集" を追加します。

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.navigationItem.rightBarButtonItem = self.editButtonItem; 
} 

これだけです。

+1

あなた(天才またはマダム)は天才です。 – Jonathan

0

同じ問題が発生しました。 UITableViewControllerのドキュメントによれば、次のようになります。UITableViewControllerはスーパークラスメソッドsetEditing:animatedを実装しているので、ユーザーがナビゲーションバーのEdit | Doneボタンをタップすると、コントローラはテーブルの編集モードを切り替えます。

UITableViewController文書の最後の箇条書きを参照してください。

あなたのviewDidLoadメソッドに次のコードを追加します:

self.navigationItem.rightBarButtonItem = self.editButtonItem; 

//上記示すためとtableviewcellのそれぞれの左隅にマイナスボタンを有効にするには、次の手順を実行し

1

ナビゲーションバーの右上隅に「EDIT」と「DONE」ボタンが表示されます。

また、.mファイルに次のメソッドを追加して、表ビューセルのMINUS記号を表示してアニメーション化します。

- (void)setEditing:(BOOL)editing animated:(BOOL)animated 
{ 
    [super setEditing:editing animated:animated]; 

    if(editing == YES) { 

    [self.tableView setEditing:editing animated:animated]; 

    } else { 

    [self.tableView setEditing:NO animated:animated]; 

    } 

}