簡體   English   中英

如何從以編程方式創建的UITableView中進行篩選?

[英]How do I segue from a programmatically created UITableView?

我正在開發一個具有從左側滑入菜單的應用程序。 使用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'終止了應用程序,原因:'Receiver()沒有標識符為'item1Settings的segue'*第一個拋出調用堆棧:(0x1822882d8 0x193aac0e4 0x186fe4c00 0x10000b030 0x10000b108 0x186df1474 0x186eab790 0x186d4c240 0x186cbc6ec 0x1822402a4 0x18223d230 0x18223d610 0x1821692d4 0x18b97f6fc 0x186d2efac 0 ++ 147 dy12 dya異常

在搜索堆棧之后,我在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

    }

您要嘗試執行的操作是選擇一個單元格時打開一個設置頁面。 為此,您需要定義一個新的UIViewController來保存設置頁面代碼。 還創建一個UIStoryboardSegue以連接當前的UIViewController和新的SettingsViewController。

然后,使用override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) ,可以在打開SettingsViewController之前獲取它,設置所需的任何屬性,並使用可用的新數據完成啟動。 您可能傳遞的一些數據可能包含告訴SettingsViewController哪個單元被選中以及應該為用戶提供什么接口的信息。

如果那不適合您,則可以實例化SettingsViewController,在其上設置屬性,並在准備好后調用currentController.presentViewController(settingsController, animated: blah, completion: blah)

您是否有標識為item1Settings的segue? 要進行檢查,請選擇您的segue,然后將標識符設置為item1Settings 看來swift在故事板中找不到此名稱設置。

在此處輸入圖片說明

我知道了...我需要從viewController而不是SideBarTableViewController執行segue:

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)
        }

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM