2016-04-01 28 views
0

Benim yöntemlerim kodumda biçimlendirdiğimde biçemdePhoneNumber/textField yöntemleri kullanıldığında, başka hiçbir alana yazmama izin vermiyor. Onları sildiğimde sorun gider. Birisi bana bu soruna neden olan kodumda neyin yanlış olduğunu gösterebilir mi? senin shouldChangeCharactersInRange: yöntemde textField içinRegex telefon numarası metin alanları kırma yöntemleri

//------------------------------------------------------------------------------------------------------------------------------------------------- 
@interface RegisterView() 

@property (strong, nonatomic) IBOutlet UITableViewCell *cellName; 
@property (strong, nonatomic) IBOutlet UITableViewCell *cellEmail; 
@property (strong, nonatomic) IBOutlet UITableViewCell *cellPassword; 
@property (strong, nonatomic) IBOutlet UITableViewCell *cellButton; 
@property (strong, nonatomic) IBOutlet UITableViewCell *cellPhone; 
@property (strong, nonatomic) IBOutlet UITableViewCell *cellFName; 
@property (strong, nonatomic) IBOutlet UITableViewCell *cellLName; 
@property (strong, nonatomic) IBOutlet UITextField  *fieldName; 
@property (strong, nonatomic) IBOutlet UITextField  *fieldEmail; 
@property (strong, nonatomic) IBOutlet UITextField  *fieldPassword; 
@property (strong, nonatomic) IBOutlet UITextField  *fieldPhone; 
@property (strong, nonatomic) IBOutlet UITextField  *fieldFName; 
@property (strong, nonatomic) IBOutlet UITextField  *fieldLName; 

@end 
//------------------------------------------------------------------------------------------------------------------------------------------------- 

@implementation RegisterView 

@synthesize cellName, cellEmail, cellPassword, cellButton, cellPhone, cellLName, cellFName; 
@synthesize fieldName, fieldEmail, fieldPassword, fieldPhone, fieldLName,fieldFName; 

//------------------------------------------------------------------------------------------------------------------------------------------------- 
- (void)viewDidLoad 
//------------------------------------------------------------------------------------------------------------------------------------------------- 
{ 
    [super viewDidLoad]; 
    self.title = @"Register"; 

    //UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"giberWallpaper.png"]]; 
    //self.tableView.backgroundColor = background; 

    self.navigationController.navigationBar.tintColor= [UIColor colorWithRed:(255/256.0) green:(128/256.0) blue:(0/256.0) alpha:(1.0)]; 
    //--------------------------------------------------------------------------------------------------------------------------------------------- 
    UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)]; 
    [self.tableView addGestureRecognizer:gestureRecognizer]; 
    gestureRecognizer.cancelsTouchesInView = NO; 
} 

//------------------------------------------------------------------------------------------------------------------------------------------------- 
- (void)viewDidAppear:(BOOL)animated 
//------------------------------------------------------------------------------------------------------------------------------------------------- 
{ 
    [super viewDidAppear:animated]; 
    [fieldName becomeFirstResponder]; 
} 

//------------------------------------------------------------------------------------------------------------------------------------------------- 
- (void)dismissKeyboard 
//------------------------------------------------------------------------------------------------------------------------------------------------- 
{ 
    [self.view endEditing:YES]; 
} 

#pragma mark - User actions 

//------------------------------------------------------------------------------------------------------------------------------------------------- 
- (void)actionRegister 
//------------------------------------------------------------------------------------------------------------------------------------------------- 
{ 
    NSString *name  = fieldName.text; 
    NSString *email  = [fieldEmail.text lowercaseString]; 
    NSString *password = fieldPassword.text; 
    NSString *phoneNumber= fieldPhone.text; 
    NSString *fName  = fieldFName.text; 
    NSString *lName  = fieldLName.text; 
    NSString *fullName = [NSString stringWithFormat: @"%@ %@", fName, lName]; 
    //--------------------------------------------------------------------------------------------------------------------------------------------- 
    if ([name length] < 3)   { [ProgressHUD showError:@"Name is too short."]; return; } 
    if ([email length] == 0)  { [ProgressHUD showError:@"Email must be set."]; return; } 
    if ([password length] == 0)  { [ProgressHUD showError:@"Password must be set."]; return; } 
    if ([phoneNumber length] == 0) { [ProgressHUD showError:@"Phone number must be set."]; return; } 
    if ([lName length] < 2)   { [ProgressHUD showError:@"Name is too short."]; return; } 
    if ([fName length] < 2)   { [ProgressHUD showError:@"Name is too short."]; return; } 
    //--------------------------------------------------------------------------------------------------------------------------------------------- 
    [ProgressHUD show:@"Please wait..." Interaction:NO]; 
    //--------------------------------------------------------------------------------------------------------------------------------------------- 
    PFUser *user = [PFUser user]; 
    user.email = email; 
    user.username = email; 
    user.password = password; 
    int randInt = arc4random() % 9000 + 1000; 
    NSString *strInt = [NSString stringWithFormat:@"%d",randInt]; 
    user[PF_USER_PIN]   = strInt; 
    user[PF_USER_NICKNAME]  = name; 
    user[PF_USER_FIRSTNAME]  = fName; 
    user[PF_USER_LASTNAME]  = lName; 
    user[PF_USER_PHONENUMBER] = phoneNumber; 
    user[PF_USER_EMAILCOPY]  = email; 
    user[PF_USER_FULLNAME]  = fullName; 
    user[PF_USER_FULLNAME_LOWER] = [fullName lowercaseString]; 

    [user signUpInBackgroundWithBlock:^(BOOL succeeded, NSError *error) 
    { 
     if (error == nil) 
     { 
      ParsePushUserAssign(); 
      PostNotification(NOTIFICATION_USER_LOGGED_IN); 
      [ProgressHUD showSuccess:@"Succeed."]; 
      [self dismissViewControllerAnimated:YES completion:nil]; 
     } 
     else [ProgressHUD showError:error.userInfo[@"error"]]; 
    }]; 
} 

-(NSString*) formatPhoneNumber:(NSString*) simpleNumber deleteLastChar:(BOOL)deleteLastChar { 
    if(simpleNumber.length==0) return @""; 
    // use regex to remove non-digits(including spaces) so we are left with just the numbers 
    NSError *error = NULL; 
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[\\s-\\(\\)]" options:NSRegularExpressionCaseInsensitive error:&error]; 
    simpleNumber = [regex stringByReplacingMatchesInString:simpleNumber options:0 range:NSMakeRange(0, [simpleNumber length]) withTemplate:@""]; 

    // check if the number is to long 
    if(simpleNumber.length>10) { 
     // remove last extra chars. 
     simpleNumber = [simpleNumber substringToIndex:10]; 
    } 

    if(deleteLastChar) { 
     // should we delete the last digit? 
     simpleNumber = [simpleNumber substringToIndex:[simpleNumber length] - 1]; 
    } 

    // 123 456 7890 
    // format the number.. if it's less then 7 digits.. then use this regex. 
    if(simpleNumber.length<7) 
     simpleNumber = [simpleNumber stringByReplacingOccurrencesOfString:@"(\\d{3})(\\d+)" 
                   withString:@"($1) $2" 
                    options:NSRegularExpressionSearch 
                    range:NSMakeRange(0, [simpleNumber length])]; 

    else // else do this one.. 
     simpleNumber = [simpleNumber stringByReplacingOccurrencesOfString:@"(\\d{3})(\\d{3})(\\d+)" 
                   withString:@"($1) $2-$3" 
                    options:NSRegularExpressionSearch 
                    range:NSMakeRange(0, [simpleNumber length])]; 
    return simpleNumber; 
} 
- (BOOL)textField:(UITextField *)fieldPhone shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    NSString* totalString = [NSString stringWithFormat:@"%@%@",self.fieldPhone.text,string]; 

    // if it's the phone number textfield format it. 
    if(self.fieldPhone.tag==102) { 
     if (range.length == 1) { 
      // Delete button was hit.. so tell the method to delete the last char. 
      self.fieldPhone.text = [self formatPhoneNumber:totalString deleteLastChar:YES]; 
     } else { 
      self.fieldPhone.text = [self formatPhoneNumber:totalString deleteLastChar:NO ]; 
     } 
     return false; 
    } 

    return YES; 
} 
#pragma mark - Table view data source 

//------------------------------------------------------------------------------------------------------------------------------------------------- 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
//------------------------------------------------------------------------------------------------------------------------------------------------- 
{ 
    return 1; 
} 

//------------------------------------------------------------------------------------------------------------------------------------------------- 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
//------------------------------------------------------------------------------------------------------------------------------------------------- 
{ 
    return 7; 
} 

//------------------------------------------------------------------------------------------------------------------------------------------------- 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
//------------------------------------------------------------------------------------------------------------------------------------------------- 
{ 
    if (indexPath.row == 0) return cellName; 
    if (indexPath.row == 1) return cellFName; 
    if (indexPath.row == 2) return cellLName; 
    if (indexPath.row == 3) return cellPhone; 
    if (indexPath.row == 4) return cellEmail; 
    if (indexPath.row == 5) return cellPassword; 
    if (indexPath.row == 6) return cellButton; 
    return nil; 
} 

#pragma mark - Table view delegate 

//------------------------------------------------------------------------------------------------------------------------------------------------- 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
//------------------------------------------------------------------------------------------------------------------------------------------------- 
{ 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
    //--------------------------------------------------------------------------------------------------------------------------------------------- 
    if (indexPath.row == 6) [self actionRegister]; 
} 

#pragma mark - UITextField delegate 

//------------------------------------------------------------------------------------------------------------------------------------------------- 
- (BOOL)textFieldShouldReturn:(UITextField *)textField 
//------------------------------------------------------------------------------------------------------------------------------------------------- 
{ 
    if (textField == fieldName) 
    { 
     [fieldFName becomeFirstResponder]; 
    } 
    if (textField == fieldFName) 
    { 
     [fieldLName becomeFirstResponder]; 
    } 

    if (textField == fieldLName) 
    { 
     [fieldPhone becomeFirstResponder]; 
    } 

    if (textField == fieldPhone) 
    { 
     [fieldEmail becomeFirstResponder]; 
    } 
    if (textField == fieldEmail) 
    { 
     [fieldPassword becomeFirstResponder]; 
    } 
    if (textField == fieldPassword) 
    { 
     [self actionRegister]; 
    } 
    return YES; 
} 

@end 
+0

Metin alanlarını değiştirdiğinizde, Arabirim Oluşturucu'daki çıkışı orijinal alandan mı çıkardınız? Bu basit bir şey ama geçmişte bu hatayı yaptım, bu yüzden sormam gerektiğini düşündüm. – fsb

+0

hmm, doğru görünüyor. Her Hücrenin referans verme çıkışı, .m –

+0

'daki özelliğe karşılık gelir. Değiştirdiğiniz metin alanında ne var? Önce .m dosyasına bağlı olan metin alanını aldığınızı ve sonra bunu farklı bir metin alanına dönüştürdüğünüzü düzelttim mi? Öyleyse, bu bağlantı eski metin alanında hala var ve IB'de silinmesi gerekiyor. – fsb

cevap

0

Değişim fieldPhone, bu UITextField fieldPhone ait yerel beyanı ile çelişen ediyor.

Ayrıca, bu yöntemdeki tüm başvuruları yeni textField'a güncellemeniz gerekir. Yani yeni yönteminiz şöyle görünecektir: - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string.

+0

uygulama mağazasına gönderirken sorunlara yol açacaktır, çünkü bu benim giriş alanım, doğru davranmıyorum (sadece bu tek metin alanında veri girilmesine izin verir). –

+0

Bu kısmı anlamıyorum. Her metin alanı için bu yöntem çağrılır ve hangi adın var olduğu önemli değildir. Aslında, sadece sizin adınız gibi aynı ada sahip bir metin alanınız varsa önemlidir. Yeniden adlandırıldıysa, ihtiyacınız olan 'etiket' bölümüne yine de başvurabilirsiniz. – fsb

İlgili konular