2010-04-28 50 views
4

我使用DTGridView從DTKit由丹尼爾·塔爾。我在一個非常簡單的ViewController中實現了它,並且我正在做的測試是在網格的最後一行放置一個按鈕,該按鈕應該向網格添加另一行(並將按鈕移動到其下的一行)。DTGridView失去內容,同時滾動

的問題是,當我點擊按鈕幾次,然後開始滾動,網格似乎失去其內容。由於我不完全確定這是網格中的一個錯誤,但更多的是在我的代碼中,我希望你們可以幫助我並追蹤錯誤。

首先,我有我的頭文件,它是非常簡單的,因爲這是一個試驗:

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

@interface TestController : UIViewController <DTGridViewDelegate, DTGridViewDataSource> 
{ 
    DTGridView*  thumbGrid; 
} 

@end 

我宣佈一個DTGridView,這將是我的網格,在這裏我希望把內容

現在

,我的代碼文件:

#import "TestController.h" 

@implementation TestController 

int rows = 1; 

- (NSInteger)numberOfRowsInGridView:(DTGridView *)gridView 
{ 
    return rows; 
} 

- (NSInteger)numberOfColumnsInGridView:(DTGridView *)gridView forRowWithIndex:(NSInteger)index 
{ 
    if (index == rows - 1) 
     return 1; 
    else 
     return 3; 
} 

- (CGFloat)gridView:(DTGridView *)gridView heightForRow:(NSInteger)rowIndex 
{ 
    return 57.0f; 
} 

- (CGFloat)gridView:(DTGridView *)gridView widthForCellAtRow:(NSInteger)rowIndex column:(NSInteger)columnIndex 
{ 
    if (rowIndex == rows - 1) 
     return 320.0f; 
    else 
     return 106.6f; 
} 

- (DTGridViewCell *)gridView:(DTGridView *)gridView viewForRow:(NSInteger)rowIndex column:(NSInteger)columnIndex 
{ 
    DTGridViewCell *view = [[gridView dequeueReusableCellWithIdentifier:@"thumbcell"] retain]; 

    if (!view) 
     view = [[DTGridViewCell alloc] initWithReuseIdentifier:@"thumbcell"]; 

    if (rowIndex == rows - 1) 
    { 
     UIButton* btnLoadMoreItem = [[UIButton alloc] initWithFrame:CGRectMake(10, 0, 301, 57)]; 
     [btnLoadMoreItem setTitle:[NSString stringWithFormat:@"Button %d", rowIndex] forState:UIControlStateNormal]; 
     [btnLoadMoreItem.titleLabel setFont:[UIFont boldSystemFontOfSize:20]]; 
     [btnLoadMoreItem setBackgroundImage:[[UIImage imageNamed:@"big-green-button.png"] stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0] forState:UIControlStateNormal]; 
     [btnLoadMoreItem addTarget:self action:@selector(selectLoadMoreItems:) forControlEvents:UIControlEventTouchUpInside]; 
     [view addSubview:btnLoadMoreItem]; 
     [btnLoadMoreItem release]; 
    } 
    else { 
     UILabel* label = [[UILabel alloc] initWithFrame:CGRectMake(10,0,100,57)]; 
     label.text = [NSString stringWithFormat:@"%d x %d", rowIndex, columnIndex];  
     [view addSubview:label]; 
     [label release]; 
    } 

    return [view autorelease]; 
} 

- (void) selectLoadMoreItems:(id) sender 
{ 
    rows++; 
    [thumbGrid setNeedsDisplay]; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    thumbGrid = [[DTGridView alloc] initWithFrame:CGRectMake(0,0, 320, 320)]; 
    thumbGrid.dataSource = self; 
    thumbGrid.gridDelegate = self; 
    [self.view addSubview:thumbGrid]; 
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
} 

- (void)dealloc { 
    [super dealloc]; 
} 

@end 

我實現所有的數據源的方法,這似乎工作。網格中充滿了我的int'rows'(+1)所具有的行數。最後一行不包含3列,但只有一列。該單元格包含一個按鈕(按下時)將'rows'整數加1。

的問題開始,當它開始重用細胞(我猜測)和內容開始消失。當我向後滾動時,我放入單元格的UILabels消失了。

有一些bug,代碼錯誤,錯誤,啞屁股的舉動,我在這裏失蹤?希望任何人都能幫忙。

回答

2

我有一個快速瀏覽一下代碼,你一定要在selectLoadMoreItems等呼籲reloadData,而不是setNeedsDisplay這樣:

- (void) selectLoadMoreItems:(id) sender { 
    rows++; 
    [thumbGrid reloadData]; 
} 

讓我知道這是否解決,如果不是我帶你去今天晚些時候通過你的代碼的適當看看。

+0

丹尼爾您好,感謝響應。我嘗試過這樣做(這是我的第一次嘗試),但這會導致網格閃爍並且不能解決問題。 – 2010-04-29 09:27:20

+0

我有同樣的問題,並且reloadData不起作用,要麼:( – 2010-12-22 15:06:35

1

有一個pull request似乎來解決這個問題。底線是每次調用checkView時調用initialiseViews。