簡體   English   中英

我是否正確使用數據模型? 如何為過濾器頁面組織代碼?

[英]Am I using a data model properly? How do I organize my code for a filter page?

我正在創建一個視圖,它是一個篩選器頁面。 過濾器頁面有20多個按鈕供用戶選擇。 他們選擇的任何按鈕都與完成過濾器選擇后將呈現給他們的圖像相對應。 (圖像用與過濾器頁面相同的按鈕標記)。 我很困惑的是如何組織此頁面的代碼。 最初,我是在Main.Storyboard中的Interface Builder上構建View的。 我分別創建了每個按鈕,並使用IBoutlet和IBactions將它們連接到與視圖關聯的Filter ViewController頁面。 這個過程花費了很長時間,並導致了很長的代碼頁。

我想知道是否有更有效的方法來做到這一點。 我正在考慮在不使用“界面”構建器的情況下對該頁面進行編程,並創建包含各種按鈕的文本的數組。 聽起來像個好主意嗎? 應該創建包含各種按鈕(按類別組織)的文本的數組,並將其存儲在數據模型中,還是應創建並存儲在ViewController文件中? 在這種情況下,使用數據模型存儲按鈕標題字符串會有意義嗎? 我基於對MVC模型不斷發展的理解來提出這個問題。 謝謝!

如果您能夠使用表格視圖,則整個過程會更加順暢,並且許多代碼行將減少為幾行。


創建表視圖並具有相應的UITableViewController

設置原型單元,並具有一個相應的自定義UITableViewCell類。 將按鈕連接到該單元格類中的IBOutlet

class MyCell: UITableViewCell {

    @IBOutlet weak var myButton: UIButton!

返回您的tableView控制器

有一個變量來保存標題:

class MyTableViewController: UITableViewController {

    var titles: [String] = []

viewDidLoad ,從數據模型中獲取標題並填充titles數組。 如果在完成數組之前進行任何處理,則可能需要在表視圖控制器之外的類或結構進行所有工作並僅發送完成的數組。 在純MVC中,表視圖控制器不應該關心模型如何獲取該數組,而只關心它返回了數組。 如果僅對數組進行硬編碼,則可以將其放在視圖控制器代碼中,但是隨着事情變得越來越復雜,如果它在單獨文件中的不同類中會更好。

cellFoRowAt方法中,為每個單元格的按鈕分配一個標題,該標題來自您通過行索引獲得的數組:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView(withIdentifier: "MyCell", for: indexPath) as! MyCell

    let title = titles[(indexPath as NSIndexPath).row]

    cell.myButton.setTitle("\(title)", for: .normal)

現在,最重要的是,您只需要將Interface Builder中的一個按鈕連接到IBAction。 您將必須檢測按下了哪個按鈕(因為您現在有20行,每個行都有一個調用相同操作的按鈕。)

@IBAction func buttonPressed(_ sender: UIButton) {

    let button = sender   // You now have the exact button that was pressed. You can get the title, get the row number, etc

}

暫無
暫無

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

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