2017-08-25 49 views
2

我正在一個項目上有UITableViewUISwitch headerview。以下是我的代碼標題視圖。我已經嘗試了不同的問題,關於headerview上的按鈕點擊事件,但沒有一個解決方案似乎工作。在UITableView的headerview中的UISwitch正在改變狀態,但沒有調用事件處理方法

如果有幫助,我設置了UITableView標題高度。

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { 
    return 100; 
} 

這是我的標題代碼。

class NotificationSettingsTableHeaderView : UIView, ViewProtocol { 

    //other controls 
    var mainSwitch : UISwitch! 
    var contentView : UIView! 

    weak var temp: SettingCellDelegate? 

    func handle(sender: UISwitch) { 

    // ----------- THIS METHOD IS NOT GETTING CALLED ------------ 
     if(sender.isOn){ 
      print("IS ON") 
     } 
     else{ 
      print("IS OFF") 
     } 

    } 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
     addSubviews() 
     makeConstraints() 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 


    func addSubviews() { 

     contentView = UIView() 

    // Other control initialization 
     mainSwitch = UISwitch() 
     mainSwitch.addTarget(self, action: #selector(NotificationSettingsTableHeaderView.handle(sender:)), for: UIControlEvents.valueChanged) 
     contentView.addSubview(mainSwitch) 

    } 

    func makeConstraints() { 

     let screen = UIScreen.main.bounds 

     contentView.frame = CGRect(x: 0, y: 0, width: screen.width, height: 80) 
     mainSwitch.snp.makeConstraints { (make) in 
      make.centerY.equalTo(contentView) 
      make.right.equalTo(contentView).offset(-10) 
     } 
     // other code 

    }  
} 

被修改

我加入內容查看使用以下代碼來報頭。

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView { 

    let cell = NotificationSettingsTableHeaderView() 
    let cat = preferenceSection.allSections[section] 
    cell.label.text = cat.getTitle() 
    cell.descLabel.text = cat.getSubtitle() 
    return cell.contentView 
} 

這是我的標題視圖的外觀。我甚至能夠開啓/關閉開關

+2

你*眼看*了'UISwitch'在頭看法?你在標題視圖中看到*任何*嗎?我沒有看到你在哪裏添加'contentView'到標題視圖... – DonMag

+0

是的,我能夠看到整個標題視圖。我甚至可以點擊'UISwitch'並打開/關閉它。 @DonMag – Pooja

+0

@DonMag請檢閱我編輯的問題。 – Pooja

回答

1

檢查你有你的UISwitch在UIView層次結構,@DonMag說,看來你已經忘了添加內容查看,查看層次,你的處理方法是實例方法,不要一個類的方法,所以

更改這條線在你addSubviews方法

mainSwitch.addTarget(self, action: #selector(NotificationSettingsTableHeaderView.handle(sender:)), for: UIControlEvents.valueChanged) 

通過這一

mainSwitch.addTarget(self, action: #selector(self.handle(sender:)), for: UIControlEvents.valueChanged) 

更新1

你需要回報您NotificationSettingsTableHeaderView對象,你是這個,而不是返回的內容查看

改變這條線在你的你的UITableViewDelegate

return cell.contentView 

viewForHeaderInSection方法一個

return cell 

更新2

func addSubviews() { 

     contentView = UIView() 

    // Other control initialization 
     mainSwitch = UISwitch() 
     mainSwitch.addTarget(self, action: #selector(NotificationSettingsTableHeaderView.handle(sender:)), for: UIControlEvents.valueChanged) 
     self.addSubview(mainSwitch) 
    } 

func makeConstraints() { 

    mainSwitch.snp.makeConstraints { (make) in 
     make.centerY.equalTo(self) 
     make.right.equalTo(self).offset(-10) 
    } 
    // other code 

} 
+0

我也試過。它仍然沒有工作。 @Reinier Melian – Pooja

+0

@Pooja再次檢查我的答案 –

+0

請參閱我編輯的問題@Reinier Melian – Pooja

相關問題