質問: editButtonItem() ``` 一方、Storyboard上で「Bar Button Item」を配置し「System Item」プロパティを「Edit」に変更したボタンはボタンの表示が「完了」に変わりません。 質問は2つあります。 1.ボタンの文字を変更する方法を教えてください。 2.今現在は編集ボタンに関してのみ差異(コードで配置する場合とSB上で配置する場合での差異)に気づきましたが、他にも挙動で違いがあるものでしょうか? 画面レイアウトに関する部分は可能な限りSB上で設定ができれば開発効率が良いかなと思っていたのですが... コードでセットする方が安心かな〜と思い始めました^^;
回答: 1. ボタンの文字を変更する方法 Storyboard上から追加するデフォルトのBar Button Itemでは自動で「Edit→Done」のように **文字を変更することはできない**と思います。 Storyboardから追加できるBar Button Itemは`UIBarButtonItem`です。 System Itemプロパティは UIBarButtonItemの`initWithBarButtonSystemItem:target:action:`に該当します。 このメソッドの引数のSystem Itemは iOSデフォルトのボタンの **デザインの設定** を意味します。 ※Referenceに詳細が書かれています。 UIBarButtonItem Class Reference: initWithBarButtonSystemItem:target:action: UIBarButtonItem Class Reference: UIBarButtonSystemItem もし、Storyboard上で配置したいのであれば、 **UIBarButtonItemをカスタム化** することが考えられます。 つまり、UIBarButtonItemを継承して、文字変更メソッドを追加したクラスを作成し、 Storyboard上で追加したUIBarButtonItemのCustom Classにそれを設定する方法です。 2. 「Storyboardから追加するBar Button Item」と「editButtonItem()」の違いについて `editButtonItem()`が何かと言うと、 Edit/Doneの切換えが可能なカスタム`UIBarButtonItem`を返すメソッドを追加した `UIViewController`の拡張機能です。 実際に`UIViewController`の中身を見てみると、次のように定義されています。 extension UIViewController { ``` public var editing: Bool public func setEditing(editing: Bool, animated: Bool) // Updates the appearance of the Edit|Done button item as necessary. Clients who override it must call super first. public func editButtonItem() -> UIBarButtonItem // Return an Edit|Done button that can be used as a navigation item's custom view. Default action toggles the editing state with animation. ``` } 編集ボタンだけでなく、`UINavigationController`を使うときなど、 どうしてもStoryboardだけで収まらなくなることは多々あると思います。 なので、1ではカスタム化といった方法を書きましたが、 個人的には **Storyboardとコードをうまく活用し合う** のが良いと思います。 少しでも参考になれば幸いです。