tableView reloadData

1.需求說明:從頁面1點擊按鈕,將頁面刷新成頁面2的樣紙。

2.思路:在頁面1的tableView最後一行添加一個按鈕,點擊按鈕後,使用tableView reloadData方法重新加載頁面,修改頁面內容及行數。

3.問題:發現在點擊後,頁面行數及內容確實有修改,但是按鈕並未被reloadData方法給幹掉,這讓我十分惱火。如下圖:


4.代碼如下:

            if(!(self.alarm?.isConfirm)!as Bool){
                var button:UIButton =UIButton()
                button.frame = CGRectMake(10, 5, self.view.bounds.width-20,40)
                button.enabled = true
                button.setTitle(Common.getText("alarm.detail.acknowledge", tableName:"alarmtxt"), forState: .Normal)
                button.addTarget(self, action:"acknowledged", forControlEvents: .TouchUpInside)
                button.setTitleColor(UIColor.whiteColor(), forState:UIControlState.Normal)
                button.backgroundColor = UIColor(red: 113/255.0, green:180/255.0, blue:81/255.0, alpha:1)
                button.titleLabel?.font =UIFont.systemFontOfSize(CGFloat(CustomFont.TOPBARTITLE))
                cell?.addSubview(button)
            }else{
                cell?.textLabel?.text =Common.getText("alarm.detail.acknowledgedby",tableName:"alarmtxt")
                cell?.detailTextLabel?.text =self.alarm?.confirmUser
            }

  

5.檢查發現,reloadData之後確實是走的else這一段的代碼,並無什麼明顯錯誤。
於是我將button移到循環外,在else裏使用button.removeFromSuperview()方法試圖刪除殘留的按鈕,失敗。
通過各種在else中對button的背景色,位置的修改,均無效,可見在else中並沒有操作到我們看到的這個button對象,操作的只是
var button:UIButton = UIButton()
裏新的button,而它並沒有在我們的列表中。

6.解決方式:
將button定義爲全局變量,在調用tableView.reloadData之前,調用其button.removeFromSuperview()方法,將其移除。

發佈了38 篇原創文章 · 獲贊 9 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章