2016-10-12 2 views
1

위젯 방식을 사용하여 버튼을 누르면 UITableViewCell에서 ViewController로 탭 동작을 구현하려고합니다.버튼 액션 UITableViewCell에서 ViewController로

protocol UserCellDelegate : class { 
    func disableUser(cell: UserCell, button: UIButton) 
} 

class UserCell : UITableViewCell { 

    @IBOutlet weak var userLabel: UILabel! 
    @IBOutlet weak var userDescription: UILabel! 

    @IBOutlet weak var writeOutUser: UIButton! 

    weak var delegate: UserCellDelegate? 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     writeOutUser.layer.cornerRadius = 5.0 
    } 


    @IBAction func disableUserButtonAction(sender: UIButton) { 
     delegate?.disableUser(self, button: writeOutUser) //self here I believe to be the cell 
    } 


} 

의 ViewController :

class UserDetailTableViewController : UIViewController, UserCellDelegate { 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     let userCell = UserCell() 
     userCell.delegate = self 
    } 

    func disableUser(cell: UserCell, button: UIButton) { 
     print("VC: User Disabled") 
    } 
} 

이며, 내의 ViewController에서 disableUser 함수가 절대 호출되지됩니다 여기서 문제

TableViewCell을 - 다음은 내가 지금까지있는 것입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

가장 좋은 방법은 무엇입니까?

나는 동일한 것을 따르고 있지만 행운이없는 SO Approved Answer Here을 언급했다. 도움이 될 것입니다. 감사!!

+1

은 대리인이 vieDidLoad에서 nil 인 것처럼 보입니다. cellForRow 메쏘드에서 delagate를 설정해야합니다. –

+0

'UITableViewCell'의 인스턴스를 기본 이니셜 라이저'()'로 초기화 할 수 없습니다. 지정된 초기화 자'init (style : reuseIdentifier :)'를 호출해야합니다. Swift에서는 델리게이트 패턴보다는 콜백 클로저를 사용하는 것이 더 편리합니다. – vadian

+0

@TejaNandamuri : 그게 속임수 였어!나는 그것이 tableViewCell이라는 사실을 간과했다 : - ( –

답변

0

당신은 당신이 기본 초기화를 사용하여 셀을 초기화하지 말아야의 viewDidLoad에서 말했다 @vadian cellForRowAtIndexPath method.As에서 셀의 delegate을 설정해야하며, 대리인이 viewDidLoad에서이 방법하여 셀 전무하다.

init (style : reuseIdentifier)를 사용하여 셀을 초기화하거나 행 메서드에 대한 셀에서 대리자를 설정하면 해당 메서드에서 셀을 초기화 할 수 있습니다. 단지userCell의 대리자를 당신은 userCell의 대리자를 설정하는

let userCell = UserCell() 
userCell.delegate = self 

:

0

당신은이 일을 할 때. 테이블보기에 표시된 표보기 셀이 이 아니고userCell이 아닌 것으로 확신합니다.

따라서 대리자를 userCell으로 설정하는 대신 실제로 테이블보기에 표시 할 셀의 대리인을 설정해야합니다. 테이블보기에 표시하려는 새 셀을 만드는 가장 가능성이있는 곳은 tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) 메서드입니다. 방법에있어서

, 당신은 이런 식으로 뭔가가 있어야합니다

cell.delegate = self 
0

코드에서 UserCell 행위를 UIView 같은 :

let cell = ... 
// setting properties of cell using the model 
return cell 

당신은 단지 반환하기 전에이 줄을 추가해야합니다. 현재 컨트롤러보기에 userCell을 추가하는 것을 잊었습니다. UITableViewCell을 사용하려면 더 나은 방법은 UITableView에서 사용하는 것입니다.