2014-09-01 1 views
6

Swift에서 listView에 대한 사용자 정의 셀을 만들었습니다. 그것에는 두 개의 버튼이 있습니다. 하나는 '일시 정지'버튼이고 다른 하나는 '중지'버튼입니다. 아이디어는 각 광고 항목이 다운로드를 표시하므로 사용자가 각 광고 항목을 개별적으로 중지하고 시작할 수 있다는 것입니다.Swift에서 사용자 정의 listView 셀에서 눌렀던 버튼 식별

그러나 각 버튼에 @IBAction을 만들어야합니다. 나는 이것들을 주된 ViewController에서 만들었고, 확실히 연결되었을 때 적절한 트리거를한다.

내가 붙어있는 비트는 어떤 행의 버튼이 눌 렸는지에 대한 식별자를 식별하는 것입니다. cellForRowAtIndexPath와 관련된 무언가가 작동한다고 가정합니다.

나는 (I 텍스트 필드에 관한 비슷한 질문에서 발견) 다음 코드를 발견했습니다

@IBAction func startOrPauseDownloadSingleFile(sender: UIButton!) { 
    let pointInTable: CGPoint = sender.convertPoint(sender.bounds.origin, toView: self.tableView) 
    let cellIndexPath = self.tableView.indexPathForRowAtPoint(pointInTable) 
} 

그러나 나는 형의 인수 목록 (과 'convertPoint'을 호출 할 수 없습니다 '오류가 계속 @l 값 CGPoint, toView : $ T6) '.

아무도 도와 줄 수 있습니까?

감사합니다.

답변

4

나는 간단한 프로젝트에 코드를 삽입했습니다.

인터페이스 빌더에서 UITableViewController 장면을 만들고 클래스를 "ViewController"로 설정했습니다. 나는 그것에 UITableViewCell을 추가하고 식별자를 "Cell"으로 설정하고 스타일을 "Custom"으로 설정하고 클래스를 "CustomCell"로 설정합니다. 그런 다음 셀의 contentView에 UIButton을 추가하고 모호하지 않은 자동 레이아웃 제약 조건을 설정했습니다. 프로젝트 네비게이터에서

, 나는 "의 ViewController"라는 새로운 파일을 생성하고 그 안에 다음 코드를 추가 :

import UIKit 

class CustomCell: UITableViewCell { 

    @IBOutlet weak var button: UIButton! 

    required init(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 

    override init(style: UITableViewCellStyle, reuseIdentifier: String!) { 
     super.init(style: style, reuseIdentifier: reuseIdentifier) 
    } 

    override func awakeFromNib() { 
     super.awakeFromNib() 
    } 

    override func setSelected(selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 
    } 

} 

class ViewController: UITableViewController { 

    func buttonPressed(sender: AnyObject) { 
     let pointInTable: CGPoint = sender.convertPoint(sender.bounds.origin, toView: self.tableView) 
     let cellIndexPath = self.tableView.indexPathForRowAtPoint(pointInTable) 
     println(cellIndexPath) 
    } 

    override func awakeFromNib() { 
     super.awakeFromNib() 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

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

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return 10 
    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as CustomCell 
     cell.selectionStyle = .None 

     cell.button.addTarget(self, action: "buttonPressed:", forControlEvents: UIControlEvents.TouchUpInside) 

     return cell 
    } 

} 

마침내 버튼의 IBOutlet 인터페이스 빌더에서 UIButton에 링크를 프로젝트를 실행 각 버튼 터치에서 각 셀의 indexPath를 기록 할 수있었습니다.

+1

나는 당신의 계획을 따랐으며 모든 것이 괜찮 았습니다. 하지만 단일 셀 안에 UI 항목을 추가하려고 시도했지만 다시 작동했지만 스크롤하여 하나의 셀이 뷰에서 빠져 나왔다가 다시 돌아 오면 제약 조건을 기억하지 못하는 것 같고 0,0 좌표의 모든 단추가 있습니다. 세포의. 그것을 고치는 방법? – Nicholas

관련 문제