2012-12-11 112 views
1

我們正在做一個UITableViewCell驗證。該電池在點擊一個textView和一個自定義按鈕,彈出了含有UIDatePickerView應該打開&用戶將選擇日期。這裏選擇日期是強制性的。所以我們使用下面的代碼進行了驗證。 textViewBeginEditing代理方法textView位於緊接着的下一行的單元格內。即當用戶點擊下一行中的textView時,以前的行值將被驗證。 這裏驗證似乎是工作,但光標仍然閃爍在當前單元格,不移動到正在驗證先前的小區。如何設置光標位置的UITextView內的UITableViewCell

UITableViewCell* myCell = (UITableViewCell*)textView.superview ; 

UITextView *txtviewMycelltext;//=[[UITextView alloc]init]; 

for (UIView *view in myCell.subviews) 
{ 

    if([view isKindOfClass:[UILabel class]]) 
    { 

     UILabel *lbl=view; 
     lbl.text=[lbl.text stringByReplacingOccurrencesOfString:@"." withString:@""]; 
     int tablerowindex=[lbl.text intValue]; 
     NSLog(@"%@",lbl.text); 
     break; 
    } 
    if([view isKindOfClass:[UITextView class]]) 
    { 
     txtviewMycelltext=view; 
    } 
} 



inttablerowindex-=1; 

if(inttablerowindex>0) 
{ 
    if([[arrActionvalues objectAtIndex:inttablerowindex1]objectForKey:KEY_FOLLOWUPDATE]==EMPTYSTRING) 
    { 
     UIAlertView *alert = [[UIAlertView alloc] 
             initWithTitle: @"Alert" 
             message: ALERT_FOLLOWUPDATE 
             delegate: nil 
             cancelButtonTitle:@"OK" 
             otherButtonTitles:nil]; 
     [alert show]; 


//    UITableView *mytable=(UITableView *)((textView.superview).superview).superview; 
     UITableView *myTable=(UITableView*)[[myCell superview]superview]; 

     NSIndexPath *indexPath = (NSIndexPath*)[myTable indexPathForCell: 
      (UITableViewCell*)textView.superview.superview]; 
     UITableViewCell *previousCell = (UITableViewCell*)[myTable cellForRowAtIndexPath:[NSIndexPath indexPathForRow:indexPath.row - 1 inSection:indexPath.section]]; 

     for (UIView *view in previousCell.subviews) 
     { 
         NSLog(@"%@",view); 
         if([view isKindOfClass:[UIView class]]) { 

          UIView *subView=view; 
          for(UIView *view2 in subView.subviews) 
          { 

           if([view2 isKindOfClass:[UITextView class]]) { 
            UITextView *txt=view2; 

            [txtviewMycelltext resignFirstResponder]; 
            [txt becomeFirstResponder]; 
            break; 
           } 
          } 


         } 
        } 
       } 
      } 

請讓我知道需要做什麼才能將光標位置移動到正確的單元格。

+0

這是一個情況下我會建議使用標籤 CodaFi

+0

究竟是什麼,你確認?你的代碼主要是通過視圖迭代,而不是笨拙的... – Mundi

+0

即時嘗試驗證用戶是否選擇了當前單元格中的日期。如果他沒有將光標位置設置到他必須選擇日期的行。 – user1531912

回答

0

它是不是從你的代碼很清楚,但是,我猜你在裏面textViewDidEndEditing執行您的驗證。

textViewShouldEndEditing是適當的委託方法來執行的文本瀏覽內容驗證。如果您想防止焦點從當前文本視圖切換,您可以返回NO。

http://developer.apple.com/library/ios/#documentation/uikit/reference/UITextViewDelegate_Protocol/Reference/UITextViewDelegate.html#//apple_ref/occ/intfm/UITextViewDelegate/textViewShouldEndEditing

+0

感謝!!!,更改委託方法textViewSHouldBeginEditing代替textViewDidBeginEditing使代碼工作按照我們的要求......再次感謝..除此之外,絕對要知道,有沒有我們可以將光標移動到任何方式一個控件? – user1531912

+0

'becomeFirstResponder'就是這樣做的方法。但是,它通常在委託方法內部不起作用,委託方法本身由響應方更改觸發。在您的委託方法中放置一個斷點並查看調用堆棧.. – user1885297

相關問題