2014-11-23 19 views
1

我想添加一個新的單元格,當用戶點擊或按下UITableView最後一個單元格時,但只有當視圖高度大於所有單元格的高度。點擊或長按下面的單元格

我不想分離器和使用:

myTableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; 

爲而不是一個空白視圖。

我嘗試更改並將UITapGestureRecognizer添加到myTableView.tableFooterView。當有足夠的單元格填滿屏幕時,他還會離開。我想要的是,它在部分空白的屏幕上工作。

我不認爲在這種情況下發送UITableViewDelegate消息。

編輯

@LeoNatan的答案後,我嘗試用(在viewDidLoad):

UIView *backView = [[UIView alloc] initWithFrame:self.myTableView.frame]; 
singleTapBack = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapBack:)]; 
//singleTapBack.delegate = self; // the problem... 
singleTapBack.numberOfTapsRequired = 1; 
singleTapBack.numberOfTouchesRequired = 1; 
[backView addGestureRecognizer:singleTapBack]; 
self.myTableView.backgroundView = backView; 

當我觸摸背景:

-[UIView indexPathForRowAtPoint:]: unrecognized selector sent to instance 0x7fff0bc16a20 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView indexPathForRowAtPoint:]: unrecognized selector sent to instance 0x7fff0bc16a20' 

0x7fff0bc16a20UIView *backView
@selector(handleTapBack:)不叫

+1

在我看來,這將是一個容易得多,如果你只是指定要用於添加另一個單元的部分最後一個單元格,並設置其樣式,將是微不足道的。 – 2014-12-18 21:24:27

+0

@JayMorgan:我知道。我提出了一種簡單的方法來添加單元格。但是我在測試新用戶期間觀察到,他們在空白部分觸及了列表下方,並添加了一些東西。我想給他們的可能性。 – Croises 2014-12-18 22:30:28

+0

@Croises:你的'handleTapBack'方法寫了什麼?問題在於這種方法。 – 2014-12-19 04:44:04

回答

2

您可以在表格的底部添加一個新的空「Create new」單元格。做這樣的事情。

@property (strong, nonatomic) UITableViewCell *createNewCell; 

- (UITableViewCell *)createNewCell { 
    if (!_createNewCell) { 
     // can be your own nib too 
     _createNewCell = [self.tableView dequeueReusableCellWithIdentifier:@"CreateNewCell" 
     _createNewCell.textLabel.text = @"+ New entry"; 
    } 
    return _createNewCell; 
} 

- (BOOL)isCreateNewCell:(NSIndexPath *)indexPath { 
    return (indexPath.row == modelArray.count + 1); 
} 

- (UITableViewCell *)tableView:(UITableView *)view cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if ([self isCreateNewCell:indexPath]) { 
     return self.createNewCell 
    } 

    // rest of cell configuration 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return modelArray.count + 1; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    if ([self isCreateNewCell:indexPath]) { 
     // do insert stuff or go into edit mode 
    } 
    // do other selection stuff 
} 

這將使您的表視圖在表格底部始終有一個額外的單元格。您可以編寫自己的行插入和編輯。

如果這不是你想要的,你可以創建一個透明的背景視圖。

myTableView.backgroundView = [[UIView alloc] initWithFrame:self.tableView.frame; 
myTableView.backgroundView.alpha = 0; 

,並添加UITapGestureRecognizer

UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@sel(newCellTapped)]; 
[myTableView.backgroundView addGestureRecognizer:tgr]; 
+0

謝謝,但我不想列表單元格的底部。我已經有了添加單元格的方法。只是在開始的時候,名單是(太)空了。而且我還希望在屏幕觸摸到現有單元格下方時添加單元格。但不是在屏幕充滿細胞之後。 – Croises 2014-12-18 21:44:23

+0

當「視圖大於所有單元格」時會發生什麼?意思? – Jadar 2014-12-18 22:19:21

+0

對不起,我的英文...當屏幕足夠大,可以顯示10個單元格。而且屏幕上只有1或2個。 – Croises 2014-12-18 22:23:20

1

如果您只希望能夠點擊表視圖的空白區域,請在表格視圖中添加backgroundView。在該背景視圖中,添加您的手勢識別器(記住在背景視圖上啓用用戶交互)。當手勢識別器檢測到輕擊時,請添加具有適當動畫的單元格。最後,檢查tableView.visibleCells.count以確定您的表格視圖是否包含足夠的單元格來填充屏幕。如果是這樣,請禁用手勢識別器。

+0

我想過這樣做。我的問題是我有一個自動調整大小的單元格。因此,不同大小的細胞。但是一旦背景被單元格掩蓋後,不需要禁用手勢識別器。或者存在干擾的風險? – Croises 2014-12-18 19:56:45

+0

確定單元格是否覆蓋表格視圖有幾種方法。根據你繪製細胞的方式,你可能甚至不需要擔心它。 – 2014-12-18 19:58:21

+0

是的,您可能只需將手勢識別器添加到背景視圖即可。表視圖通常攔截單元格上的所有水龍頭,所以背景視圖永遠不會得到它。值得一試! – Jadar 2014-12-18 23:08:27

0

那麼下面這個場景就是我會做。

  1. 始終用your_size + 1加載的tableview(1是用於將空單元)

  2. 當的tableview被加載時,創建這將有細胞的相同大小的按鈕最後一個單元。此按鈕按下

  3. 在IBAction爲

  4. 呼叫IBAction爲,補充細胞並重新裝載表

做讓我知道,如果您有任何問題。


如果您擔心分隔線,請訪問下面的鏈接。

Hide remove separator line if UITableViewCells are empty

+0

謝謝。這實際上也是我的第一個想法。但很難保持最後一個單元精確填滿屏幕(單元格通常會改變數量和大小)。 – Croises 2014-12-18 21:49:20