- 更新日: 2015年6月26日
- Swift & iOS
Outlet cannot be connected to repeating content – Xcodeエラー
Xcode の Storyboard で以下のような UI オブジェクトの階層で、Table View Cell 内の Label から、View Controller(ViewController.swift)に Outlet を作成しようとしたところ…
1 2 3 4 5 6 7 |
View Controller |- View |- Table View |- Table View Cell |- Label |
“Outlet cannot be connected to repeating content” というエラーが出てしまいました。
1 2 3 |
Outlet cannot be connected to repeating content |
UITableViewCell のような繰り返し出力されるオブジェクトから、直接に親の UIViewController に Outlet を作成することはできないらしい。
— 環境 —
Xcode 6.3.2
Swift 1.2
解決策としては、UITableViewCell のサブクラスのファイルを作成して、そっちに Outlet を作成します。そして、View Controller の tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) メソッドから、UITableViewCell に作成した Outlet の変数を操作する。
UITableViewCell のサブクラスとなるファイルを作成
まず UITableViewCell のサブクラスとなるファイル(TableViewCell.swift)を作成します。そして Storyboard の Table View Cell 内の Label から、TableViewCell.swift に Outlet を作成する。TableViewCell.swift は以下の内容となります。
TableViewCell.swift
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import UIKit class TableViewCell: UITableViewCell { @IBOutlet weak var titleLabel: UILabel! override func awakeFromNib() { super.awakeFromNib() } override func setSelected(selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) } } |
その後 TableViewCell クラスを、Xcode Storyboard 上で Table View Cell オブジェクトの Identity Inspector の Class に対応させる。Attribute inspector の Identifier にも TableViewCell と入力しておきます。
View Controller の cellForRowAtIndexPath 内で UITableViewCell の Outlet を操作
次に、View Controller の tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) メソッド内で、TableViewCell.swift に作成した Outlet の変数を操作します。以下のように TableViewCell の titleLabel に “title” を設定しました。
ViewController.swift
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import UIKit class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { // ... func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { if indexPath.section == 0 { let cell = tableView.dequeueReusableCellWithIdentifier("TableViewCell") as! TableViewCell cell.titleLabel.text = "title" return cell } return UITableViewCell() } // ... } |
以上のやり方で、UITableViewCell 内の Label に対して Outlet を正しく作成できて、上手く動作させることができました。
- Swift & iOS の関連記事
- WKWebView/UIWebViewでウェブページが真っ白
- Unityのインストールと初期設定
- WKWebView/UIWebViewでNavigation Barの下にウェブページが隠れるのを回避
- SwiftでArray(配列)などをシャッフル
- Navigation Controllerで画面遷移させるSwiftコード
- Swiftでタップ/スワイプのイベント処理実装・UITapGestureRecognizerとUISwipeGestureRecognizer
- UIPageViewController画面下部のUIPageControlを非表示にする
- Swiftのバージョン確認・REPL実行
- Xcode7.0アップデートで遭遇した課題2つ
- 正規のXcodeかどうかチェック(XcodeGhostマルウェア騒動)
Leave Your Message!