2017-06-13 63 views
0

之外我是新來的斯威夫特和iOS開發,我想看看是否有更好的方式來實現以下目標:斯威夫特修改表tableViewController

在我的應用我有被存儲爲一個表中的[ someObject]並由tableViewController管理。我編寫了用於管理tableViewController中的表的所有邏輯(添加對象,刪除對象等)。但是,tableView本身只能從表中刪除對象。我想從應用程序的不同部分以編程方式添加鍵。這樣做的麻煩是訪問表示tableViewController外部表的數組。

我想到的最好的解決方案是讓數組變成靜態的,這樣我就可以在沒有tableViewController的實例的情況下修改它(當需要將對象添加到對象時,tableViewController不會位於導航堆棧上表)。

我不想繼續到tableViewController。表格的添加應該在幕後進行。

就像我說的,我是Swift和iOS開發新手,所以我想看看是否有更好的方法來實現這一點。如果我不需要,我寧願不使用靜力學。

+0

你正試圖重新發明車輪。有一個數據源。 TVC獲取數據(直接來自源代碼或通過爲表格設置數據的自定義類)並創建表格。在代碼中的其他地方,您可以更新數據源(也可以通過直接訪問數據源或通過管理類進行更新)。 – Shades

回答

0

你不應該使用靜態數組,但你不應該有多個類管理同一個對象。 您的數組應該由Manager類管理,並且此管理器可以由多個類訪問。你的tableViewController不應該有能力刪除對象,但調用管理器,將執行這些變化

+0

爲什麼這會更好?我仍然不得不使靜態管理器類或通過導航堆棧傳遞它。在我當前的設置中,我有tableViewController完成所有工作,其他類只需調用一個方法將一個對象添加到表中。 –

+0

管理器可以是靜態的,但也可以將管理器的引用注入到需要訪問它的控制器。你的數組不應該是可訪問的,應該是private/fileprivate(setter必須是私有的,爲getter,如你所願)。 需要使用管理器來管理你的數據(你的數組在這裏)是爲了簡化你的代碼閱讀(你知道你的數據只在一個類中修改,不能從另一個類修改),允許輕鬆測試(你可以寫測試很容易,因爲您不必管理您的視圖),並允許您在任何地方重用您的代碼,因爲它沒有依賴關係。 –

0

你正在嘗試做比你更多。 Apple建立了UITableViewControllers,其中包含許多正在查找的功能。

首先在故事板中爲標籤添加一個標籤123.然後另一個具有與數組兼容的空數組的viewController來自tableViewController。

在每個viewController的身份檢查器中,確保您添加文件名並回車。

還通過查看main.storyboard中tableViewCell的屬性來設置reuseidentifier在字段標識符中輸入「cell」(no quotes)。

開始tableViewController1使用數據源的方法

override func numberOfSections(in tableView: UITableView) -> Int { 
    return 1 
} 

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return yourObjects.list.count 
} 

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 
    let label = cell.viewWithTag(123) as? UILabel 
    label?.text = yourObjects.list[indexPath.row] 

    return cell 
} 

我強烈建議使用一個navigationController,如果你不打算使用塞格斯顯示您的陣列(我假設它預裝。你沒有提到其他) 。他們是「iOS體驗」的重要組成部分,並使您試圖完成的任務變得更加輕鬆。有很多方法可以做到這一點,但這是一個相當簡單的方法。 在您的委託方法

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    let yourNextVC = storyboard?.instantiateViewController(withIdentifier: "nextVC") as! TheNextVC 
    navigationController?.pushViewController(yourNextVC, animated: true) 
    yourNextVC.arrayName = yourObjects.list[indexPath.row] 
    tableView.deselectRow(at: indexPath, animated: false) 
} 

這最後一種方法是在您的數組被從該表傳遞到下一個的viewController,您可以編輯或做你想要什麼都。