27985
ToolBar内のUIBarButtonItemのタイトル変更ができません。

```

    editButton.title = "完了"
    
```

ではなぜダメなのでしょうか？

```

    override func viewDidLoad() {
            super.viewDidLoad()
    
    //...
    
          editButton = editButtonItem()
    
        }
    
```

としても、編集ボタンになりません。

navigationBarにいれて、

```

    self.navigationItem.rightBarButtonItems![1] = editButtonItem()
    
```

とするとTableViewのeditingに合わせてタイトルが変わってくれるのですが。

* * *

解決しました。

StoryBoard上でToolBarにUIBarButtonItemを挿入するのでなく、

```

    override func viewDidLoad() {
            super.viewDidLoad()
            let button = self.editButtonItem()
            self.toolbarItems?.insert(button, atIndex: 1)
        }
    
```

とするとうまくいきました。

`editButtonItem()`として機能しました。  
tableViewの編集状態と、ボタンのタイトルが「完了」／「編集」に切り替わるようになりました。

UIViewControllerの

```

    func setEditing(editing: Bool, animated: Bool)
    
```

も呼ばれます。

理由はイマイチ理解していないのですが。。

ありがとうございました。
CC BY-SA 3.0
2016-07-31T14:10:09.437
27981
2016-07-31T20:32:46.640
2016-07-31T20:32:46.640
12297
12297
question
swift xcode
ToolBar内のUIBarButtonItemのタイトル変更
_編集ボタンになりません_ の部分が何を表したいのかよくわからないのですが。

Toolbarに入れるための編集ボタンを`UIViewController`のメソッド`editButtonItem()`で作成した場合、それはViewControllerの支配を受けるシステムアイテムになるので、その表示内容を自由に変更することはできません。

`editButtonItem()`で作成したボタンの表示を"完了"("Done")にしたいのであれば、ViewControllerのどこかのメソッドの中で、

```

    self.editing = true
    
```

等としてやります。ただし、この`editing`プロパティの値は編集ボタンを押すたびに自動的に変更されてしまい、`self.editing =
false`にすると表示は"編集"("Edit")になります。

(`editing`は`UIViewController`のプロパティですが、`editButtonItem()`で作成したbuttonItemと連携しています。)

そのようなシステムの動作が自分のやりたいことに合わない場合には、システムアイテムにならないように、

```

    myButtonItem = UIBarButtonItem(title: "完了", style: UIBarButtonItemStyle.Plain, target: self, action: #selector(myAction))
    
```

と言った形で`UIBarButtonItem`のインスタンスを作ってやらないといけません。  
この場合、`title`のローカライズなどは自前でやる必要があります。

ただ、`title`プロパティをいじれば、一時的にでも表示は変わるはずだと思うのですが…。  
`editButton.title =
"完了"`とする時の`editButton`には、実際に表示されているtoolbar内のeditButtonが正しくセットされているでしょうか?
CC BY-SA 3.0
2016-07-31T19:19:27.677
27985
2016-07-31T19:19:27.677
13972
27981
answer