2014-03-06 40 views
0

我的TableView有2個部分,在0部分只有1行我在此UITextField,我想編輯在UITextfield (section0,0行)當我使用UITapGestureRecognizer爲選項卡UITextfield僅在部分0,但部分1某些行不能選項卡tabviewcell

,但不希望選項卡中選擇行(section0,0行)

我用UITapGestureRecognizer這個問題可以固定

- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
... 
    if(indexPath.section == 0) { 
     UITapGestureRecognizer *tapRecognizer = 
     [[UITapGestureRecognizer alloc]initWithTarget:self 
               action:@selector(didTapAnywhere:)]; 
     [cell.contentView addGestureRecognizer:tapRecognizer]; 
} 
... 
} 

但是當我滾動表點擊第3行,第6行,第9行的第1部分...它不能調用didSelectRowAtIndexPath函數。

當我在第3行中註釋掉//UITapGestureRecognizer第1行時,第6行,第9行...可以選擇但第0行第0行也可以選擇(我不要)。

我覺得這個問題關於draw的時候滾動cellForRowAtIndexpath,但是我不知道怎麼解決這個問題。

謝謝

圖片樣張問題:

http://i.stack.imgur.com/lmosN.jpg

+0

請清除問題並編輯您的語法 –

回答

0

如果你只想編輯,但不希望選項卡中選擇行(section0,0行),你不需要添加tapRecognizer去做吧。 您做的更好

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (indexPath.section == 0 && indexPath.row == 0) { 
     [self.view endEditing:YES]; 
     return; 
    } 
    // an other section and row code 
} 

如果你想不更改單元格顏色當輕敲在細胞

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // code init cell here 
    if (indexPath.section == 0 && indexPath.row == 0) { 
     cell.selectionStyle = UITableViewCellSelectionStyleNone; 
    } 
    else { 
     cell.selectionStyle = UITableViewCellSelectionStyleDefault; 
    } 
} 
+0

我嘗試這種方式,但是當我點擊第0行0 表格單元格更改顏色爲灰色 並且在UItextfield鍵盤中未隱藏。 – user3377250

+0

@ user3377250我沒有改變答案和單元格不會改變顏色時,點擊,當選擇部分0行0鍵盤將隱藏 – larva

+0

謝謝,我試過它的工作,可能是這一行它幫助>> [self.view endEditing:YES] ; – user3377250

0

在第一個單元格中添加以下代碼中的cellForRowAtIndexPath

cell.userInteractionEnabled = NO; 
0

我相信你使用方法tableView:cellForRowAtIndexPath中的dequeueReusableCellWithReuseIdentifier。

如果確實使用它,背後的原因是,當您向下滾動到第1部分時,tableview將自動檢查單元池並獲取具有相同標識符的可用單元並分配給第1部分中的每一行。如果沒有找到小區,那麼你就會有這樣一些事情:

if (cell == nil) 
{ 
    //Create new cell with an identifier 
} 

由於您的第一行和段0(文本字段)不再可見,並且將返回到細胞庫,表視圖將採取它並用於第1節中的隨機行(對於您的情況是3,6,9等)。這就是爲什麼你不能在第1選擇那些行,

因此調整我們的代碼,並嘗試,如果有幫助:

@property (nonatomic, strong) UITapGestureRecognizer *tapRecognizer; 
- (void) viewDidLoad{ 
    //Do stuffs as usual 
    self.tapRecognizer = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(didTapAnywhere:)]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    .. 
    if(indexPath.section == 0) 
    { 
     //cell don't have the tap recognizer yet 
     if (cell.contentView.gestureRecognizers == nil || ![cell.contentView.gestureRecognizers containsObject:self.tapRecognizer]) 
     { 
      if (self.tapRecognizer.view != nil) 
       [self.tabRecognizer.view removeGestureRecognizer:self.tabRecognizer]; 
      [cell.contentView addGestureRecognizer:tapRecognizer]; 
     } 
    } 
    else if (cell.contentView.gestureRecognizers != nil && [cell.contentView.gestureRecognizers containsObject:self.tapRecognizer]) 
     [cell.contentView removeGestureRecognizer:self.tabRecognizer]; 


    .. 

} 

是這樣的邏輯,你可以基於該解決你的問題:-D

相關問題