0

左からスライドするメニューを持つアプリに取り組んでいます。UITableViewNSObjectを使用してプログラムで構築されたメニュー。スライド アウト メニューに項目を追加することはできましたが、Interface Builder を使用せずに識別子を使用してセグエを作成する方法がわかりません。

これが私のtableViewでやろうとしていることです:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let cellForRow = tableView.cellForRowAtIndexPath(indexPath)
    let cellLabel = cellForRow?.textLabel?.text

    delegate?.sideBarControlDidSelectRow(indexPath, cellName: cellLabel!)  

    if (cellLabel == "Item1") {
        self.performSegueWithIdentifier("item1Settings", sender: nil)
    } else {
        self.performSegueWithIdentifier("item2Settings", sender: nil)
    }

}

( 要点: SideBarTableViewController )

メニューのセルをクリックすると、次のエラーが表示されます。

2015-06-11 18:35:28.720 SideBarApp[2862:1111870] * キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。 0x193aac0e4 0x186fe4c00 0x10000b030 0x10000b108 0x186df1474 0x186eab790 0x186d4c240 0x186cbc6ec 0x1822402a4 0x18223d230 0x18223d610 0x1821692d4 0x18b97f6fc 0x186d2efac 0x1000147cc 0x19412aa08) libc++abi.dylib: terminating with uncaught exception of type NSException

スタックを検索した後、Objective-C でいくつかの解決策を見つけましたが、このシナリオの Swift では何も見つかりませんでした。

プログラムで作成された UITableView からどのようにセグエしますか?


これは、プログラムで UITableView をアセンブルする場所です。

SideBar.swift ファイル全体を表示

func setupSideBar(){

    sideBarContainerView.frame = CGRectMake(-barWidth - 1, originView.frame.origin.y, barWidth, originView.frame.size.height)
    sideBarContainerView.backgroundColor = UIColor.clearColor()
    sideBarContainerView.clipsToBounds = false

    originView.addSubview(sideBarContainerView)

    let blurView:UIVisualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: UIBlurEffectStyle.Light))
    blurView.frame = sideBarContainerView.bounds
    sideBarContainerView.addSubview(blurView)


    sideBarTableViewController.delegate = self
    sideBarTableViewController.tableView.frame = sideBarContainerView.bounds
    sideBarTableViewController.tableView.clipsToBounds = false
    sideBarTableViewController.tableView.separatorStyle = UITableViewCellSeparatorStyle.None
    sideBarTableViewController.tableView.backgroundColor = UIColor.clearColor()
    sideBarTableViewController.tableView.scrollsToTop  = false
    sideBarTableViewController.tableView.contentInset = UIEdgeInsetsMake(sideBarTableViewTopInset, 0, 0, 0)

    sideBarTableViewController.tableView.reloadData()
   sideBarContainerView.addSubview(sideBarTableViewController.tableView)

    }

ここで私はそれを呼んでいます:

ViewController.swift (初期ビュー)

override func viewDidLoad() {
    super.viewDidLoad()
    imageView.image = UIImage(named: "image2")
    sideBar = SideBar(sourceView: self.view, menuItems: ["first item", "second item", "funny item", "another item"])
    sideBar.delegate = self

    }
4

3 に答える 3

2

あなたがやろうとしているように見えるのは、セルを選択したときに設定ページを開くことです。これを行うには、設定ページのコードを保持する新しい UIViewController を定義する必要があります。また、UIStoryboardSegue を作成して、現在の UIViewController と新しい SettingsViewController を接続します。

次に、override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)開かれる直前に SettingsViewController を取得し、必要なプロパティを設定して、この新しいデータを自由に使用して起動を終了させることができます。渡す可能性のあるデータには、選択されたセルと、ユーザーに提供する必要があるインターフェイスを SettingsViewController に伝える情報が含まれている場合があります。

それがうまくいかない場合は、SettingsViewController をインスタンス化し、それにプロパティを設定して、準備ができたら呼び出すことができます。currentController.presentViewController(settingsController, animated: blah, completion: blah)

于 2015-06-12T00:32:27.593 に答える
1

識別子のセグエはありますitem1Settingsか? セグエを選択して確認するには、識別子が に設定されていることを確認しますitem1Settings。ストーリーボードでこの名前の設定が迅速に見つからないようです。

ここに画像の説明を入力

于 2015-06-12T00:24:00.907 に答える
0

私はそれを理解しました... SideBarTableViewControllerではなく、viewControllerからセグエを実行する必要がありました:

class ViewController: UIViewController, SideBarDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        sideBar = SideBar(sourceView: self.view, menuItems: ["Item1", "item2"])
        sideBar.delegate = self
    }

    func sideBarDidSelectButtonAtIndex(index: Int) {

        if (index == 0) {
            self.performSegueWithIdentifier("item1", sender: self)
        } else {
            self.performSegueWithIdentifier("item2", sender: self)
        }

    }
于 2015-06-12T00:49:27.803 に答える