2013-09-08 2 views
0

Я пытаюсь реализовать процесс регистрации с помощью синтаксического анализа. У меня есть метод проверки, называемый processFieldEntries, и как только кнопка done активизирована, я пытаюсь вызвать сегю, которую я установил модально из моего контроллера представления (не с помощью кнопки «Готово») из режима просмотра, но не вызвал ни метод проверки, ни segue запускается. Я настраиваю некоторые отладочные и протоколирующие точки останова для отладки, но я не мог отделиться от того факта, что он не видит, что представление загрузилось. Я также попытался настроить segue из сделанной кнопки. Когда я это сделал, segue запускается, а не из кода, а из раскадровки my storyboard here. Если кто-то может помочь мне разобраться, как назвать processfieldentriees вместе с segue, я бы очень признателен. Спасибо.метод проверки не вызван, и segue не запускается

NewUserSignUpViewController.h

#import <UIKit/UIKit.h> 
#import "ProfileViewController.h" 

@interface NewUserSignUpViewController : UIViewController<UITextFieldDelegate> 
@property (strong, nonatomic) IBOutlet UIBarButtonItem *barButtonItem; 
@property (strong, nonatomic) IBOutlet UITextField *usernameField; 
@property (strong, nonatomic) IBOutlet UITextField *passwordField; 
@property (strong, nonatomic) IBOutlet UITextField *repeatPasswordField; 
- (IBAction)doneEvent:(id)sender; 
- (IBAction)cancelEvent:(id)sender; 

@end 

NewUserSignUpViewController.m

#import "NewUserSignUpViewController.h" 
#import "ProfileViewController.h" 
#import <Parse/Parse.h> 
#import "ActivityView.h" 
@interface NewUserSignUpViewController() 
-(void)processFieldEntries; 
- (void)textInputChanged:(NSNotification *)note; 
- (BOOL)shouldEnableDoneButton; 
@end 

@implementation NewUserSignUpViewController 
@synthesize barButtonItem = _doneButtonInTheBar; 


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textInputChanged:) name:UITextFieldTextDidChangeNotification object:_usernameField]; 

    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textInputChanged:) name:UITextFieldTextDidChangeNotification object:_passwordField]; 
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textInputChanged:) name:UITextFieldTextDidChangeNotification object:_repeatPasswordField]; 



} 
-(void)viewDidAppear:(BOOL)animated 
{ 
    [_usernameField becomeFirstResponder]; 
    [super viewDidAppear:animated]; 
    //perform the segue 
    if (_doneButtonInTheBar.enabled == YES) { 
     [self performSegueWithIdentifier:@"segueToProfileView" sender:self]; 
    } 



} 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 
- (void)dealloc { 

} 

#pragma mark - UITextFieldDelegate 
-(BOOL)textFieldShouldReturn:(UITextField *)textField 
{ textField.delegate = self; 
    if (textField == _usernameField) {[_usernameField becomeFirstResponder];} 
    if (textField == _passwordField){[_passwordField becomeFirstResponder];} 
    if (textField == _repeatPasswordField) 
    { 

     [_repeatPasswordField becomeFirstResponder]; 
     [self processFieldEntries]; 
    } 
    return YES; 
} 
-(BOOL)shouldEnableDoneButton 
{ 
    BOOL enableDoneButton = NO; 

    if (_usernameField.text != nil && _usernameField.text.length != 0 &&_passwordField.text != nil && 
     _passwordField.text.length !=0 && _repeatPasswordField.text != nil && 
     _repeatPasswordField.text.length != 0) { 
     enableDoneButton = YES; 
     [self processFieldEntries]; 


    } 
    return enableDoneButton; 
} 

-(void)textInputChanged:(NSNotification *)note 
{ 
    _doneButtonInTheBar.enabled = [ self shouldEnableDoneButton]; 
} 
- (IBAction)doneEvent:(id)sender { 
    [_usernameField resignFirstResponder]; 
    [_passwordField resignFirstResponder]; 
    [_repeatPasswordField resignFirstResponder]; 
    NSLog(@"processfieldentries"); 
    [self processFieldEntries]; 
} 

- (IBAction)cancelEvent:(id)sender { 
    [self.presentedViewController dismissViewControllerAnimated:YES completion:nil]; 
} 
- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

-(void)processFieldEntries 
{ 
    // Check that we have a non-zero username and passwords. 
    // Compare password and passwordAgain for equality 
    // Throw up a dialog that tells them what they did wrong if they did it wrong. 
    NSString *username = _usernameField.text; 
    NSString *password = _passwordField.text; 
    NSString *passwordAgain = _repeatPasswordField.text; 
    NSString *errorText = @"Please "; 
    NSString *usernameBlankText = @"enter a username"; 
    NSString *passwordBlankText = @"enter a password"; 
    NSString *joinText = @", and "; 
    NSString *passwordMismatchText = @"enter the same password twice"; 

    BOOL textError = NO; 
// Messaging nil will return 0, so these checks implicitly check for nil text. 

if (username.length == 0 || password.length == 0 || passwordAgain.length == 0) { 
    textError = YES; 
    //setting the keyboard for th first missing output 
    if (passwordAgain.length == 0) { 
     [_repeatPasswordField becomeFirstResponder]; 
    } 
    if (password.length == 0) { 
     [_passwordField becomeFirstResponder]; 
    } 
    if (username.length == 0) { 
     [_usernameField becomeFirstResponder]; 
    } 

    if (username.length == 0) { 
     errorText = [errorText stringByAppendingString:usernameBlankText]; 
    } 

    if (password.length == 0 || passwordAgain.length == 0) { 
     if (username.length == 0) { // We need some joining text in the error: 
      errorText = [errorText stringByAppendingString:joinText]; 
     } 
     errorText = [errorText stringByAppendingString:passwordBlankText]; 
    } 
}else if ([password compare:passwordAgain] != NSOrderedSame) 
{errorText = [errorText stringByAppendingString:passwordMismatchText]; 
    [_passwordField becomeFirstResponder];} 
    if (textError) { 
     UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:errorText message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:@"Ok", nil]; 
     [alertView show]; 
     return; 
     // Everything looks good; try to log in. 
     // Disable the done button for now. 
     _doneButtonInTheBar.enabled = NO; 

     ActivityView *activityView = [[ActivityView alloc]initWithFrame:CGRectMake(0.f, 0.f, self.view.frame.size.width, self.view.frame.size.height)]; 
     UILabel *label = activityView.label; 
     label.text = @"signing up"; 
     label.font = [UIFont boldSystemFontOfSize:20.0f]; 
     [activityView.activityIndicator startAnimating]; 
     [activityView layoutSubviews]; 
     [self.view addSubview:activityView]; 

     // Call into an object somewhere that has code for setting up a user. 
     // The app delegate cares about this, but so do a lot of other objects. 
     // For now, do this inline. 
     NSLog(@"does it reach here"); 
     PFUser *user = [PFUser user]; 
     user.username = username; 
     user.password = password; 
     [user signUpInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { 
      if (error) { 
       UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:[[error userInfo] objectForKey:@"error"] message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:@"Ok", nil]; 
       [alertView show]; 
       _doneButtonInTheBar.enabled = [self shouldEnableDoneButton]; 
       [activityView.activityIndicator stopAnimating]; 
       [activityView removeFromSuperview]; 
       // Bring the keyboard back up, because they'll probably need to change something. 
       [_usernameField becomeFirstResponder]; 
       return; 
      } 
      // Success! 
      [activityView.activityIndicator stopAnimating]; 
      [activityView removeFromSuperview]; 
      }]; 

    } 

} 
@end 

ответ

0

Вы можете попробовать не использовать performSegueWithIdentifier внутри viewDidAppear (performSegue на самом деле вас к другой ViewController). Вместо этого вы можете вызвать его из метода IBAction, связанного с кнопкой done, после вызова тем же методом processFieldEntries. Я надеюсь, что это может вам помочь :)