我使用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,代碼錯誤,錯誤,啞屁股的舉動,我在這裏失蹤?希望任何人都能幫忙。
丹尼爾您好,感謝響應。我嘗試過這樣做(這是我的第一次嘗試),但這會導致網格閃爍並且不能解決問題。 – 2010-04-29 09:27:20
我有同樣的問題,並且reloadData不起作用,要麼:( – 2010-12-22 15:06:35