2016-07-18 9 views
3

나는 컬렉션보기와 버튼이 있습니다. 이 버튼을 누르면 이름을 변경하고 싶습니다. 나는 그것을 할 수 있었지만 내가 탭할 때 20 개의 버튼이 있다면 10 개가 바뀐다. 첫 번째 버튼을 탭하면 0,2,4,6,8이 바뀌고, 목록에 없으면 모든 버튼이 선택됩니다. 내가 너무 if 문없이 시도셀 안의 버튼의 제목을 변경하는 방법 Swift

@IBAction func following(sender: AnyObject) { 
     if follow.tag == sender.tag { 
     follow.setTitle("Following", forState: .Normal) 
     } 
     print("\(follow.tag) \(sender.tag)") 
    } 

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
     let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Interest Cell", forIndexPath: indexPath) as! ThirdTabCell 

     cell.follow.tag = indexPath.row 
     return cell 



     } 

버튼의 함수 내부 그러나 다시 같은 문제 :

이 내 코드입니다. 태그를 인쇄하면 탭 한 단추 만 인쇄됩니다.

나는 또한 나의의 ViewController에

cell.follow.addTarget(self, action: #selector(ThirdTab.follow(_:)), forControlEvents: UIControlEvents.TouchUpInside) 
//inside cellForItemAtIndexPath 

    func follow(sender:UIButton!) { 



     } 
+0

어디서 다음()을 요청할 수 있습니까? 재사용 가능한 셀에서 IBAction을 가질 수 없어야합니다. 또한 보낸 사람이 AnyObject 대신 UIButton이어야한다고 가정합니다. – Happiehappie

+0

ibaction 함수가 셀 클래스 내부에 있음 –

+0

VC에서 선택기 메서드를 만드는 것이 좋습니다. – Happiehappie

답변

3

그냥 짧은 개요이 시도, 그래서 당신은 당신의 답변을 얻을

UICollectionView는 고도로 최적화되고, 따라서 만에 스크린 메모리에 표시 행을 유지 . 이제는 모든 행 셀이 풀에 캐시되어 재사용되고 다시 생성되지 않습니다. 사용자가 UICollectionView를 스크롤 할 때마다 풀에 방금 숨겨진 행을 추가하고 표시 행 옆에 다시 사용합니다.

그래서, 지금, 당신의 대답에 오는

당신이 버튼을 누르는 제목이 업데이 트됩니다,하지만 당신은 컬렉션보기, "업데이트 버튼 텍스트"와 같은 셀을 스크롤하면 될 것입니다 재사용되고 으로 표시되는 문제가 발생할 수 있습니다.

솔루션

배열

SAVE 버튼 상태, 액션 방법

@IBAction func following(sender: AnyObject) { 
     if follow.tag == sender.tag { 
      array[sender.tag] = "<text>" 
      collectionView.reloadData() 
     } 
     print("\(follow.tag) \(sender.tag)") 
    } 

에 당신의 데이터 소스 메서드 내 업데이트 당신의 단추 텍스트 아래 같은 :

// 트릭은 각 색인에 대해 버튼 텍스트를 업데이트하는 것입니다.

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell{ 
    //SAMPLE CODE 
    let buttonValue = array[indexPath.index] 

    // update button value for each index 
    //trick is to update your button text for each index  
    cell.button.setTitle("", forState: .Normal) 
} 
+0

내 viewcontroller 오른쪽에 모든 업데이트 된? –

+0

예! \t viewcontroller의 모든 것 –

+0

작동하지 않았습니다 ... 몇 가지 변경을 시도하고 알려 드리겠습니다. –

0

다음 기능에서 설정 제목 줄 아래를 변경하십시오.

기존 라인 :

follow.setTitle("Following", forState: .Normal) 

새로운 라인이 당신을 위해 노력하고 있습니다

follow.setTitle("Following", forState: UIControlState.Normal) 

희망.

감사합니다.

+0

다시 동일한 문제 (나는 당신을 downvote하지 않았다) –

+0

당신은 바로 지금 Swift에서 열거에 대한 정규 수 있습니다. UIControlState를 보유하고 있습니다. 지금 아무 것도하지 않습니다 – Happiehappie

1

나는이 방법으로 접근하는 것이 좋습니다.

cellForItemAtIndexPath 안쪽이

cell.followOutlet.tag = indexPath.row 

같은 버튼 콘센트를 할당 할 수 있습니다 다음 추적 기능 내부에이

@IBAction func following(sender: AnyObject) { 
     let follow = sender as! UIButton 
     let indexP = NSIndexPath(forRow: follow.tag, inSection: 0) 
     let cell = yourCollectionView.cellForItemAtIndexPath(indexP) as! yourCellName 

     follow.setTitle("Following", forState: .Normal) 

    } 

을 수행 할 수 있습니다 그리고 지금 당신은 당신이 당신의 버튼을 사용하여 원하는대로 할 수 있습니다.

+0

다시 같은 문제가 없습니다. –

관련 문제