少なくとも Swift を使用する Xcode 6.1.1 では、tabBarItem を直接操作してもうまくいかないことがわかりました。
しかし、@borrrdenの答えは私を正しい軌道に乗せました。UITabBarController に関する Apple のドキュメントには、次のように明確に記載されています。
タブ バー コントローラーのタブ バー ビューに直接アクセスしないでください。タブ バー コントローラーのタブを構成するには、各タブのルート ビューを提供するビュー コントローラーを viewControllers プロパティに割り当てます。
...
タブ バーの項目は、対応するビュー コントローラーを介して構成されます。タブ バー アイテムをビュー コントローラーに関連付けるには、UITabBarItem クラスの新しいインスタンスを作成し、ビュー コントローラー用に適切に構成して、ビュー コントローラーの tabBarItem プロパティに割り当てます。
したがって、それに従って、以下は私が思いついたもので、私にとってはうまくいきました。
これは Swift で書かれており、将来の読者が必要に応じて適切に翻訳できることを願っています (画像名も非常に一般的なものに変更しました)。
また、UIImage の imageWithRenderingMode メソッドを使用したので、iOS が作成する影のシルエットのデフォルト画像の代わりにカスタム画像を使用できました (そのための @NSHeffalump の回答をここで評価したいと思います...)。
if let viewControllers = tabBarController.viewControllers as? Array<UIViewController> {
var tabBarItemImageNames = ["TabBarItemImage0","TabBarItemImage1","TabBarItemImage2","TabBarItemImage3","TabBarItemImage4"]
var vcIndex = 0
for vc:UIViewController in viewControllers {
let selectedImage = UIImage(named: tabBarItemImageNames[vcIndex])?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
let image = UIImage(named: tabBarItemImageNames[vcIndex])?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
var tabBarItem = UITabBarItem(title: "", image: image, selectedImage: selectedImage)
vc.tabBarItem = tabBarItem
vcIndex++
}
}