iPhone Storyboardテーブルビューの編集

私はXcodeで新しいStoryboard機能を学ぼうとしていましたが、UITableViewを編集モードに設定しようとすると問題が発生しました。

これまでの私のストーリーボードはこういう感じです:

NavigationController -> UIViewController (subclass with tableview property)

ナビゲーション・アイテムとバー・ボタン・アイテムをビュー・コントローラー・シーンに追加したので、編集ボタンが表示されます。それは自動的に何もしなかったので、私はそれをセレクタをtableviewデリゲートのsetEditingメソッドにリンクしてみました。これは編集モードになりました。ただし、編集ボタンは「完了」ボタンに変わらないので、編集モードを終了する方法はありません。

完了ボタンの別のナビゲーション項目を作成する必要がありますか?適切なタイミングで表示され、正しく動作するように接続するにはどうすればよいですか?

9

7 答え

私はストーリーボードでも、作業中の編集/完了ボタンを実装するための唯一の方法(確かに最も簡単な方法)は、次のコードを使用することです:

- (void)viewDidLoad
{
[super viewDidLoad];
...
//set the edit button
self.navigationItem.leftBarButtonItem = self.editButtonItem;
...

これは、プロジェクトの「マスター/ディテール・アプリケーション」テンプレートを選択した場合、Apple自身が実装するソリューションです。

おそらくストーリーボードはまだ完璧ではないし、うまくいけば次のリリースでアップルから改良されるだろう。

27
追加された

ストーリーボードの使用を開始したばかりなので、ストーリーボードを使用して[編集]ボタンを追加することも考えました。新しいツールを使用する方法を学ぶのに時間を割いたが、穴にパッチを当てるためにダクトテープのロールが必要であることがわかったのは面倒です。

あなたはそれを働かせることができますが、カスタムボタンを追加する必要があります。属性インスペクタで、識別子がカスタムで、タイトルが編集であることを確認します。

次に、このようなものをあなたの.mに追加します。

- (IBAction)setEditMode:(UIBarButtonItem *)sender {
    if (self.editing) {
        sender.title = @"Edit";
        [super setEditing:NO animated:YES];
    } else {
        sender.title = @"Done";
        [super setEditing:YES animated:YES];
    } 
}

カスタム編集ボタンでsetEditModeメソッドを呼び出します。

将来、ストーリーボードエディタで編集ボタンの実装を修正することができれば幸いです。

13
追加された
6年後...まだ修正されていません。
追加された 著者 gone,

要約する:

UIViewController.editButtonItem によって返されるButtonは、 - (void)setEditing:(BOOL)アニメーション編集:(BOOL)アニメーションを呼び出す特別な動作を持つ特別なトグルボタンです。 。

UINavigationController.editButtonItem によって返されるButtonは単純なButtonで、 "Edit"というラベルが付けられています。

ストーリーボードでは後者を選択できます。

6
追加された

ナビゲーションコントローラを使用してView Controllerにプッシュする場合は、 self.navigationItem.rightBarButtonItem = self.editButtonItem; を設定するだけで、デフォルトの[編集]ボタンが右側に表示されます。ナビゲーションバーが表示されない場合は、 self.navigationController.navigationBarHidden = NO; を呼び出します。これらのメソッドは、 viewDidLoad メソッドなどで呼び出されます。次に、編集呼び出しに応答するようにtableViewを取得するには、次のメソッドを使用します。

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

それはあなたがしたいことをするはずです。問題がある場合は、そのように言いますと、詳細を絞り込むことができます

5
追加された
それはほとんど同じでなければならない。私はストーリーボードのUI(私は人生をもっと楽にしてくれると言いたい)を使っていて、同様のことをしなければならなかったので、私はそれについてどうやって行ったのです。 heirarchyで目的のビューを取得するために、時には self.parentViewController.navigationItem.rightBarButtonItem = yourButton; を通過しなければならないことがあります。しかし、あなたのtableViewがIBOutletとしてviewControllerにリンクされている限り、残りの部分は以前と同じままでなければなりません
追加された 著者 justin,
@SebastianWrambaあなたは正直なところ、そういうことをすることができるはずです。編集と呼び、 setEditing:animated:を呼び出すIBActionメソッドを割り当てます。個人的には、 self.navigationItem.rightBarButtonItem = self.editButtonItem を使用して、特定のView Controllerの viewDidLoad メソッドでプログラムで作成します。そうすれば、標準のボタン項目なので、メソッド( setEditing ... )を割り当てる必要はありません。うまくいけばそれは理にかなっている
追加された 著者 justin,
それについてのニュースはありますか? 1つのLOCを新しいストーリーボード機能で置き換える方法を理解しようとしていました。ナビゲーションバーにボタンを置いて「編集」という名前を付けるだけでは機能しません。 ;)
追加された 著者 Sebastian Wramba,
確かに、私は車輪を再発明していると思います(またはこの場合、車輪をどこかに置いてください)がとてもスマートな動きではありません。エディットボタンを実装すると、ストーリーボードやセグが存在しても、古風なやり方はまだ最良のようです。
追加された 著者 Sebastian Wramba,
ええ、私はそれをプログラム的にする方法を知っていますが、私はストーリーボードUIを通してそれを達成しようとしています。
追加された 著者 markplee,

@Grahamの回答に追加するには、「完了」ボタンのスタイル(青色)を持つようにスタイルを変更することもできます。このようなもの:

- (IBAction)setEditMode:(UIBarButtonItem *)sender {
    if (self.editing) {
        sender.title = @"Edit";
        sender.style = UIBarButtonItemStylePlain;
        [super setEditing:NO animated:YES];
    } else {
        sender.title = @"Done";
        sender.style = UIBarButtonItemStyleDone;
        [super setEditing:YES animated:YES];
    } 
}
2
追加された

ストーリーボードエディタの編集ボタンを使用せずにダムを使用し、プログラムで UIViewController.editButtonItem に置き換えることができます。

viewDidLoad:

 NSMutableArray *toolbarItems = [NSMutableArray arrayWithArray:self.toolbarItems];

[toolbarItems replaceObjectAtIndex:0 withObject:self.editButtonItem];

[self setToolbarItems:toolbarItems];    

このコードでは、ストーリーボードのツールバーの一番左のアイテムとして「編集」ボタンが追加されているものとします。

1
追加された
それについて何がハッキーですか?ありがとう
追加された 著者 kitschmaster,
しかし、私はまだハック用語に同意しない:)とにかく "ハック"は何ですか?私の場合、このコードはハックから遠いです。そのコードがシステムやコンピュータのデータへの不正なアクセスを取得した場合にはハックだが、それは通常の編集ボタンの定型文である...
追加された 著者 kitschmaster,
これは少しハッキリですが、編集ボタンを再実装することをお勧めします。
追加された 著者 SeanR,
Interface Builderで追加したボタンをコードを使ってボタンで置き換えると、ちょっとハックしたように見えますが、アップルの面では、このようにしなければならない欠点です。私が間違ってはいけないと思うが、これはAppleがInterface Builderの実際の編集ボタンをサポートしていないときの最善の解決策だと思う。
追加された 著者 SeanR,

UIViewControllerを持っていて、この中にUITableVIewを追加した場合。 UITableViewと対話するために編集UIBarButtonを追加する場合は、次のようにしてください。

この行を追加...

- (void)viewDidLoad
{
    [super viewDidLoad];

    ...

    self.navigationItem.leftBarButtonItem = self.editButtonItem;

    ...
}

この方法

- (void)setEditing:(BOOL)editing animated:(BOOL)animated {

    [super setEditing:editing animated:animated];
    [self.myListTableView setEditing:editing animated:animated];

    if(self.myListTableView.editing) {
        NSLog(@"editMode on");
    } else {
        NSLog(@"editMode off");
    }
}

どこで

@property (weak, nonatomic) IBOutlet UITableView *myListTableView;
1
追加された