我的应用程序的主窗口显示一个SplitViewController。左边是显示名称的TableView。右边是一个DetailsView,由2个textview组成,显示姓名和年龄。
这是我为应用程序创建的SQLite数据库和'USERS'表。
-(NSString *)dataFilePath
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
return [documentsDir stringByAppendingPathComponent:@"Mydata.sqlite"];
}
- (void)viewDidLoad
{
[super viewDidLoad];
if(sqlite3_open([[self dataFilePath] UTF8String], &database) != SQLITE_OK)
{
sqlite3_close(database);
NSAssert(0, @"Failed to open database.");
}
char *err;
NSString *sql = @"CREATE TABLE IF NOT EXISTS USERS" "(ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, AGE INTEGER);";
if(sqlite3_exec(database, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK)
{
sqlite3_close(database);
NSAssert(0, @"Failed to create table.");
}
}
我想用名字填充TableView。当一个名字在表格中被选中时,SplitViewController右侧的textviews将显示被选中的名字以及年龄。
我可以知道怎么做吗?
里面有很多问题。从它的声音你想知道如何加载值,如何在表视图中显示它们,如何从表视图发送消息到主视图,然后如何在主视图中显示内容。
首先为'User'对象创建一个模型对象。然后在user类中编写一个可以调用的静态方法,该方法返回一个数组中的所有用户。
一旦你有了数组,使用它来填充tableView使用标准的'cellForRowAtIndexPath'方法。一旦用户点击单元格,通过委托方法将选定的用户对象传递给主视图,然后最后在相关标签中显示其各种详细信息(姓名,年龄等)。
如果有任何不清楚的地方让我知道,我可以发布一个代码片段来帮助你。
编辑:所以. .创建对象并将其加载到tableViewController(只写.ms)的代码片段:
对于User类
@implementation User
@synthesize pk, name, age;
#pragma mark - Public Instance Methods
+ (NSArray *)getAllUsers
{
sqlite3 *db = **However you get your db conn**
sqlite3_stmt *statement = nil;
NSMutableArray *userArray = [NSMutableArray array];
NSString *fullQuery = @"SELECT * FROM User";
const char *sql = [fullQuery UTF8String];
if(sqlite3_prepare_v2(db, sql, -1, &statement, NULL)!=SQLITE_OK)
NSAssert1(0, @"Error preparing statement '%s'", sqlite3_errmsg(db));
else
{
while(sqlite3_step(statement) == SQLITE_ROW)
{
User *currentUser = [[User alloc] init];
[User setPk:[NSString stringWithUTF8String:(const char*)sqlite3_column_text(statement, 0)]];
[User setName:[NSString stringWithUTF8String:(const char*)sqlite3_column_text(statement, 1)]];
[User setAge:[NSString stringWithUTF8String:(const char*)sqlite3_column_text(statement, 2)]];
[userArray currentUser];
[currentUser release];
}
}
sqlite3_finalize(statement);
sqlite3_close(db);
return [NSArray arrayWithArray:userArray];
}
现在对于你的表视图控制器:
- (void)init
{
self = [self init];
if (self)
{
[self setUserArray:[User getAllUsers]];
}
}
- (void)dealloc
{
[super dealloc];
[userArray release];
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [userArray count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
[cell setSelectionStyle:UITableViewCellSelectionStyleBlue];
[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
}
User *currentUser = [userArray objectAtIndex:indexPath.row];
[[cell textLabel] setText:user.name];
return cell;
}
希望这能给你一个如何进行的想法。如果你对如何继续感到困惑,我建议你阅读"模型-视图-控制器"编程方法以及表视图是如何工作的。一开始有点困难,但你会成功的。
希望有帮助