2012-01-12 4 views
5

UITableViewCell에 단추를 추가하고 싶습니다. 이것은 내 코드입니다. 'UITableViewCell에 단추 추가

if (indexPath.row==2) { 
    UIButton *scanQRCodeButton = [[UIButton alloc]init]; 

    scanQRCodeButton.frame = CGRectMake(0.0f, 5.0f, 320.0f, 44.0f); 
    scanQRCodeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    scanQRCodeButton.backgroundColor = [UIColor redColor]; 
    [scanQRCodeButton setTitle:@"Hello" forState:UIControlStateNormal]; 

    [cell addSubview:scanQRCodeButton]; 
}` 

이제 앱을 실행하면 빈 행만 표시됩니다. 어떤 아이디어?

+0

'[cell.contentView addSubview : scanQRCodeButton];을 추가 한 후'[scanQRCodeButton release]; 버튼을 해제 할 수도 있습니다. – elprl

+0

* ARC를 사용하지 않는 경우 – elprl

답변

13

셀의 contentView에 넣는 것이 자연 스럽지만 문제가되지 않는다는 것이 확실합니다 (실제로 과거에는 contentView에 서브 뷰가 올바르게 표시되지 않았으므로 항상 셀을 사용했다).

어쨌든, 문제는 단추를 만들기 시작할 때의 처음 세 줄을 포함합니다. 처음 두 줄은 잘하지만, 코드는 작업 중지 :

scanQRCodeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 

buttonWithType : 사실은 (는 소형 ALLOC - 초기화 같다) 버튼을 만들 수있는 편리한 방법입니다. 따라서 실제로는 지난 두 줄을 "무효화"합니다 (기본적으로 두 번 버튼을 만들었습니다). 동일한 버튼에는 init 또는 buttonWithType : 만 사용할 수 있지만 둘 다 사용할 수는 없습니다.

UIButton *scanQRCodeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
scanQRCodeButton.frame = CGRectMake(0.0f, 5.0f, 320.0f, 44.0f); 
scanQRCodeButton.backgroundColor = [UIColor redColor]; 
[scanQRCodeButton setTitle:@"Hello" forState:UIControlStateNormal];  
[cell addSubview:scanQRCodeButton]; 

원하는대로 원하면 cell.contentView를 사용할 수 있습니다. ARC (Automatic Reference Counting)를 사용하지 않는 경우에는 buttonWithType : 자동 다시 시작 버튼을 반환하기 때문에 메모리 관리 측면에서 아무 것도하지 않아도됩니다.

+0

예. 그것이 문제였습니다. 고마워. – utsabiem

4

사용자 정의 UI 요소를 셀 contentView에 추가하려고합니다.

그래서, 대신 [cell addSubview:scanQRCodeButton];
의 할 [cell.contentView addSubview:scanQRCodeButton];

1

시도 [cell.contentView addSubview:scanQRCodeButton];를 추가하거나, 답변에 my question에서 왼쪽 모양의 버튼을 원하는 경우, 측면으로 textLabel를 이동합니다. 오른쪽 버튼을 원하면 accesoryView (cell.accesoryView = scanQRCodeButton;)으로 설정하면됩니다.

+0

contentview에서도 추가했으나 작동하지 않았습니다. . 나는 Kevin Low가 해결책을 제시했다고 생각한다. 내가 그것을 시도하자. – utsabiem

7
UIButton *deletebtn=[[UIButton alloc]init]; 
      deletebtn.frame=CGRectMake(50, 10, 20, 20); 
      deletebtn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
      [deletebtn setImage:[UIImage imageNamed:@"log_delete_touch.png"] forState:UIControlStateNormal]; 
      [deletebtn addTarget:self action:@selector(DeleteRow:) forControlEvents:UIControlEventTouchUpInside]; 
      [cell.contentView addSubview:deletebtn]; 

또는

// 프로젝트에서 다운로드 클래스와 수입 UIButton+EventBlocks

UIButton *deletebtn=[UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[deletebtn setFrame:CGRectMake(170,5, 25, 25)]; 
deletebtn.tag=indexPath.row; 
[deletebtn setImage:[UIImage imageNamed:@"log_delete_touch.png"] forState:UIControlStateNormal]; 
[deletebtn setOnTouchUpInside:^(id sender, UIEvent *event) { 


    //Your action here 
}]; 
[cell addSubview:deletebtn]; 
0

내 코드에서 작동하지 않습니다, 그래서이

[UIButton.titleLabel setText:@""] 
를 사용하여 설정 한 setTitle 방법

대신 setTitle 메서드를 사용하십시오.

다음 코드를 사용하여 다시 시도하십시오 :

[scanQRCodeButton.titleLabel setText:@"Hello"]; 

그런 다음 그것을 잘 작동합니다.