15

Tôi có bảng phân cảnh có nút trong Điều khiển chế độ xem điều hướng, điều khiển này cũng có trường văn bản, sử dụng phân đoạn bảng phân cách push. Tuy nhiên, tôi có một số kiểm tra đầu vào và tôi cảnh báo người dùng nếu bất kỳ trường văn bản nào trống.Kịch bản Xcode hủy đẩy nếu điều kiện không được đáp ứng

Tôi có thể làm điều này, NHƯNG nó cảnh báo người dùng và sau đó chuyển sang chế độ xem khác.

Có cách nào để hủy điều này push nếu điều kiện if không được đáp ứng trong nút Phương pháp đã nhấn không?

N.B Đẩy này được tạo bởi giao diện bảng phân cảnh chứ không phải theo mã.

Trả lời

28

Sau đây cũng có thể được sử dụng và sẽ làm việc với nhiều loại khác nhau của segues như push, hãy thư giãn, vv Name segue từ Storyboard và sử dụng mã được đưa ra ở đây. Trả về NO cho điều kiện nếu bạn không muốn thực hiện phân đoạn cụ thể và trả về YES theo mặc định. Phương thức này phải nằm trong bộ điều khiển xem nguồn.

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { 
    if ([identifier isEqualToString:@"Segue_Name"]) { 
     NSLog(@"Segue Blocked"); 
     //Put your validation code here and return YES or NO as needed 
     return NO; 
    } 

    return YES; 
} 
+3

Tôi thích điều này tốt hơn câu trả lời được chấp nhận. – bandejapaisa

+1

tốt hơn nhiều so với câu trả lời được chấp nhận ... –

+0

Điều này tốt hơn vì bạn có thể giữ mũi tên đẩy trong bảng phân cảnh và chỉ sửa đổi điều này để thêm các điều kiện cần thiết của bạn –

33

Không tạo phân đoạn bằng cách kéo từ nút đến bộ điều khiển đích. Thay vào đó, chỉ cần kéo từ bộ điều khiển nguồn đến bộ điều khiển đích để tạo ra một phân đoạn. Nhấp vào segue và sử dụng các thanh tra thuộc tính để xác định segue là một đẩy và cung cấp cho segue một định danh (goToDestination). Sau đó kết nối nút với IBAction trong bộ điều khiển xem nguồn. Trong phương pháp IBAction làm kiểm tra của bạn và nếu bạn muốn làm việc đẩy mạnh thêm dòng mã này:

[self performSegueWithIdentifier: @"goToDestination" sender: self]; 
+0

thanx rất nhiều .... –

0

Nếu buttonAction là phương pháp mà phải thực hiện trên nút bấm, bạn phải gọi hai phương pháp bên trong nó 1. Phương pháp kiểm tra các điều kiện 2. Phương pháp để kiểm soát segue

- (IBAction)buttonAction:(id)sender 
    { 
    [self validateEnteredData]; 
    [self shouldPerformSegueWithIdentifier:kSegueName sender:sender]; 
    } 

Phương thức xác thực của bạn sẽ trông giống như sau

-(void)validateEnteredData 
{ 
if (self.usernameTextField.text.length==0 && self.passwordTextField.text.length==0) 
{ 
    UIAlertView * alert=[[UIAlertView alloc]initWithTitle:kError message:kInvalidationMessage delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; 
    [alert show]; 
    return; 
} 
else if (![self.usernameTextField.text isEqualToString:@"admin"] && ![self.passwordTextField.text isEqualToString:@"pass"]) 
{ 
    UIAlertView * alert=[[UIAlertView alloc]initWithTitle:kError message:kLoginFailed delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; 
    [alert show]; 
    return; 
} 
} 

và segue có thể được kiểm soát bởi đoạn mã sau

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender 
{ 
if ([identifier isEqualToString:kSegueName]) 
{ 
//Validation: Return NO if you don't want to execute the segue action   
    if (self.usernameTextField.text.length==0 && self.passwordTextField.text.length==0) 
    { 
     return NO; 
    } 
    else if (![self.usernameTextField.text isEqualToString:@"admin"] && ![self.passwordTextField.text isEqualToString:@"pass"]) 
    { 
     return NO; 
    } 
} 

    return YES; 
} 
Các vấn đề liên quan