2014-12-13 3 views
0

안녕하세요 각각 하나의 UIButton에 두 개의 다른 동작을 추가하려고합니다. 내보기에는 "편집"과 "새로운"과 같은 두 가지 UIButton이 있으며 서로 다른 작업과 테이블보기가 있습니다. 편집 버튼을 클릭하면 테이블보기의 편집 옵션이 표시되고 "새로 만들기"버튼 제목 라벨이 "지우기"로 변경되고 "편집"이 "완료"로 변경됩니다. "지우기"텍스트를 클릭하면 경고가 표시됩니다 취소 버튼은 정상적인 이전 상태로 이동합니다. 이 모든 것이 정상적으로 작동합니다. "새로 만들기"를 클릭하면 다음보기로 이동해야하지만, 편집 옵션을 표시하고 다음보기로 이동하는 것입니다.하나의 UIButton에 대해 두 개의 UIButton 동작을 추가하는 방법

// 편집 테이블 방법

- (void)setEditing:(BOOL)editing animated:(BOOL)animated 
{ 
    [super setEditing:editing animated:animated]; 
    [messagesTableView setEditing:editing animated:YES]; 

} 

// 버튼 액션과 방법

- (IBAction)editButtonAction:(id)sender 
{ 
    if ([editButton.titleLabel.text isEqualToString:@"Edit"]) 
    { 

     [self setEditing:YES]; 
     // 
     [editButton setTitle:@"Done" forState:UIControlStateNormal]; 
     [editButton setTitle:@"Done" forState:UIControlStateSelected]; 

     [createNewMessageBtn setTitle:@"Clear" forState:UIControlStateNormal]; 
     [createNewMessageBtn setTitle:@"clear" forState:UIControlStateSelected]; 
     createNewMessageBtn.tag = 2; 
     createNewMessageBtn.enabled = YES; 
     createNewMessageBtn.userInteractionEnabled = YES; 

     //  [self.voicemailTable reloadData]; 

    } 
    else if ([editButton.titleLabel.text isEqualToString:@"Done"]) 
    { 
     [self setEditing:NO]; 

     // 
     [editButton setTitle:@"Edit" forState:UIControlStateNormal]; 
     [editButton setTitle:@"Edit" forState:UIControlStateSelected]; 

     [createNewMessageBtn setTitle:@"New" forState:UIControlStateNormal]; 
     [createNewMessageBtn setTitle:@"New" forState:UIControlStateSelected]; 
     createNewMessageBtn.tag = 1; 
     createNewMessageBtn.enabled = YES; 
     createNewMessageBtn.userInteractionEnabled = YES; 
     //  [self.voicemailTable reloadData]; 

    } 

    // 
    [self.messagesTableView reloadData]; 


} 

- (IBAction)newConverstionBtnActn:(id)sender 
{ 
    if ([sender tag] == 1) 
    { 
     [self setEditing:NO]; 

     NSLog(@"tag---%ld",(long)[sender tag]); 
     [self.editButton setTitle:@"Edit" forState:UIControlStateNormal]; 
     [self.editButton setTitle:@"Edit" forState:UIControlStateSelected]; 

     [self.createNewMessageBtn setTitle:@"New" forState:UIControlStateNormal]; 
     [self.createNewMessageBtn setTitle:@"New" forState:UIControlStateSelected]; 
     createNewMessageBtn.enabled = YES; 
     createNewMessageBtn.userInteractionEnabled = YES; 
     [self performSegueWithIdentifier:@"newMessage" sender:self]; 


    } 

    else if ([sender tag] == 2) 
    { 
     NSLog(@"tag---%ld",(long)[sender tag]); 

     [self.createNewMessageBtn setTitle:@"New" forState:UIControlStateNormal]; 
     [self.createNewMessageBtn setTitle:@"New" forState:UIControlStateSelected]; 
     createNewMessageBtn.enabled = YES; 
     createNewMessageBtn.userInteractionEnabled = YES; 

     transparentView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 300, 540)]; 
     transparentView.backgroundColor = [UIColor clearColor]; 

     [self.view addSubview: transparentView]; 

     // 
     clearAllOption = [[UIButton alloc]initWithFrame: CGRectMake(5, 430, 310, 39)]; 
     clearAllOption.layer.borderColor = [[SupportFeatures getColorFromHexStr:@"FD8646"] CGColor]; 
     clearAllOption.layer.borderWidth = 2; 
     clearAllOption.layer.cornerRadius = 6; 
     [clearAllOption setTitle:@"Clear All Messages" forState:UIControlStateNormal]; 
     [createNewMessageBtn setTitleColor:[SupportFeatures getColorFromHexStr:@"555562"] forState:UIControlStateNormal]; 
      self.clearAllOption.titleLabel.font = [UIFont fontWithName:@"Lato-Regular" size:15]; 


     [clearAllOption setBackgroundColor:[SupportFeatures getColorFromHexStr:@"FD8646"]]; 
     [clearAllOption addTarget:self action:@selector(clearAllContactsAction) forControlEvents:UIControlEventTouchUpInside]; 
     //[self.view addSubview: clearAllOption]; 
     [self.transparentView addSubview: clearAllOption]; 


     // 
     cancelOption = [[UIButton alloc]initWithFrame: CGRectMake(5, 480, 310, 39)]; 
     cancelOption.layer.borderColor = [[SupportFeatures getColorFromHexStr:@"4BBAC7"] CGColor]; 
     cancelOption.layer.borderWidth = 2; 
     cancelOption.layer.cornerRadius = 6; 
     [cancelOption setTitle:@"Cancel" forState:UIControlStateNormal]; 
     cancelOption.titleLabel.font = [UIFont fontWithName:@"Lato-Regular" size:15]; 
     [cancelOption setTitleColor:[SupportFeatures getColorFromHexStr:@"555562"] forState:UIControlStateNormal]; 

     [cancelOption setBackgroundColor:[SupportFeatures getColorFromHexStr:@"4BBAC7"]]; 
     [cancelOption addTarget:self action:@selector(cancelContactsAction) forControlEvents:UIControlEventTouchUpInside]; 

     //[self.view addSubview: cancelOption]; 
     [self.transparentView addSubview: cancelOption]; 

     // 
     self.editButton.userInteractionEnabled = NO; 
//  self.createNewMessageBtn.userInteractionEnabled = YES; 

    } 
} 


- (void)clearAllContactsAction 
{ 
    // 
    [self.transparentView removeFromSuperview]; 

    // 
    self.messagesTableView.hidden = YES; 

    [self.createNewMessageBtn setTitle:@"New" forState:UIControlStateNormal]; 
    [self.createNewMessageBtn setTitle:@"New" forState:UIControlStateSelected]; 
// createNewMessageBtn.enabled = YES; 


    [self.createNewMessageBtn setTitleColor:[SupportFeatures getColorFromHexStr:@"555562"] forState:UIControlStateNormal]; 
    [self.createNewMessageBtn setTitleColor:[SupportFeatures getColorFromHexStr:@"555562"] forState:UIControlStateSelected]; 
    [self.createNewMessageBtn setUserInteractionEnabled: YES]; 

    // 
    [clearAllOption removeFromSuperview]; 
    [cancelOption removeFromSuperview]; 
    // 
    noRecentsOption = [[UILabel alloc]initWithFrame:CGRectMake(100, 100, 150, 30)]; 
    noRecentsOption.text = @"No Recents"; 
    [self.view addSubview: noRecentsOption]; 

    // 
    self.editButton.userInteractionEnabled = NO; 
    self.createNewMessageBtn.userInteractionEnabled = YES; 

} 

- (void)cancelContactsAction 
{ 
    [self setEditing:NO]; 

    [createNewMessageBtn setTitle:@"New" forState:UIControlStateNormal]; 
    [createNewMessageBtn setTitle:@"New" forState:UIControlStateSelected]; 
    createNewMessageBtn.tag = 1; 
    createNewMessageBtn.enabled = YES; 
    createNewMessageBtn.userInteractionEnabled = YES; 
    // 
    [self.transparentView removeFromSuperview]; 

    [clearAllOption removeFromSuperview]; 

    [cancelOption removeFromSuperview]; 
    // 
    [self.editButton setTitle:@"Edit" forState:UIControlStateNormal]; 
    [self.editButton setTitle:@"Edit" forState:UIControlStateSelected]; 
    editButton.enabled = YES; 
    editButton.userInteractionEnabled = YES; 


} 

이 작업 방법 난했습니다 tried.Thanks 태그 값에 기초 사전

+0

Relevant UIButtons ([editButton와 Method 다음 연결 Code

[self.btnEdit setTitle:@"Edit" forState:UIControlStateNormal]; [self.btnNew setTitle:@"New" forState:UIControlStateNormal]; 

다음 viewDidLoad 넣어에서 Code을 다음과 같이 이제 한 시도하십시오 .titleLabel.text isEqualToString : @ "편집"]) 경고를 표시하고 다음 화면으로 이동합니다. – svs

답변

1

당신과 함께 [발신자 태그] 대신에

- (IBAction)btnEdit_Done_Click:(id)sender { 

    if([[self.btnEdit titleForState:UIControlStateNormal] isEqualToString:@"Edit"]){ 
     NSLog(@"Put code for allow editing for TableView"); 
     [self.btnNew setTitle:@"Clear" forState:UIControlStateNormal]; 
     [self.btnEdit setTitle:@"Done" forState:UIControlStateNormal]; 
    }else{ 
     [self.btnEdit setTitle:@"Edit" forState:UIControlStateNormal]; 
     [self.btnNew setTitle:@"New" forState:UIControlStateNormal]; 
    } 

} 

- (IBAction)btnNew_Clear_Click:(id)sender { 

    if([[self.btnNew titleForState:UIControlStateNormal]isEqualToString:@"New"]){ 
     NSLog(@"Push to New Controller"); 
    }else{ 
     UIAlertView * alert = [[UIAlertView alloc]initWithTitle:@"Title" message:@"Message" delegate:self cancelButtonTitle:nil otherButtonTitles:@"Ok",@"Cancel", nil]; 
     [alert setTag:101]; 
     [alert show]; 
    } 
} 

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 

    if([alertView tag] == 101){ 

     [self.btnEdit setTitle:@"Edit" forState:UIControlStateNormal]; 
     [self.btnNew setTitle:@"New" forState:UIControlStateNormal]; 
     if(buttonIndex == 1){ 
      NSLog(@"clear All Thing"); 
     }else{ 
      NSLog(@"No Action"); 
     } 
    } 
} 
0

에서 다음과 같이 추가 할 수 있습니다. -

(editButton.tag==1) ? [editButton addTarget:self action:@selector(doEditAction:) 
forControlEvents:UIControlEventTouchUpInside]:[editButton addTarget:self action:@selector(doneAction:) forControlEvents:UIControlEventTouchUpInside]; 

-(void)doEditAction:(id)sender 
{ 

} 
-(void)doneAction:(id)sender 
{ 

} 
+0

단일 버튼에 두 개의 태그를 넣을 수 있습니까? 그것은 가능합니까 ?? – svs

+0

예. 조건에 따라 두 개의 태그를 설정할 수 있습니다. –

0

내 이해만큼,

'newbtnaction'으로 버튼을 "새"로 설정하고 그 방법 안에 버튼의 제목을 "clear"로 변경하고 addtarget을 'clearaction'메소드 이름으로 변경합니다.

두 번째 버튼과 같은 방식입니다.