如何使用NSMutable Array作为DataSource

时间:2012-11-09 04:35:08

标签: ios uitableview nsmutablearray datasource uialertview

抱歉,我是iOS新手。我打算在UITableViewUIAlertView。最后我得到了this tutorial

我已经以这种方式实施了UIAlertTableView课程

UIAlertTableView *alert = [[UIAlertTableView alloc] initWithTitle:@"Choose a number"
                                                          message:nil
                                                         delegate:self
                                                cancelButtonTitle:@"Cancel"
                                                otherButtonTitles:nil, nil];
alert.tableDelegate = self;
alert.dataSource = self;
alert.tableHeight = 120;
[alert show];

然而,在测试之后,我得到了UIAlert显示的空白列表,里面没有任何项目。以前我有一个NSMUtableArray,我想用作数据源。从上面的教程中,似乎使用alert.dataSource = self完成了分配数据源。然而,我仍然想知道如何使用我的NSMutableArray作为数据源以及它与alert.dataSource的关系?

2 个答案:

答案 0 :(得分:0)

您已告知UIAlertView您的类将作为其数据源,但您还需要至少覆盖​​以下UITableView数据源方法,此处mutableArray指的是您要用作数据源的可变数组:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [mutableArray count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    }
    // Set up the cell...
    NSString *cellValue = [mutableArray objectAtIndex:indexPath.row];
    cell.text = cellValue;
    return cell;
}

答案 1 :(得分:0)

我建议你需要创建一个新文件作为alertView的表数据源和委托。 实施:

@interface MyTableSource: UIViewController <UITableViewDataSource, UITableViewDelegate>
@end

@implementation MyTableSource

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

return 7;

}

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

    static NSString *CellIdentifier = @"MyIdentifier";


    UITableViewCell *cell = [tableViews dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil)
    {

        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    cell.textLabel.text = @"M";
    return cell;

}

@end

创建如下警告:

UIAlertTableView *alert = [[UIAlertTableView alloc] initWithTitle:@"Choose a number"
                                                          message:nil
                                                         delegate:self
                                                cancelButtonTitle:@"Cancel"
                                                otherButtonTitles:nil, nil];
MyTableSource *data = [[MyTableSource alloc] init];
alert.tableDelegate = data;
alert.dataSource = data;
alert.tableHeight = 120;
[alert show];

注意: 我实现了alertView进行测试,有很多问题。 你需要打电话:

在alertView类中

[self layoutAnimated:YES];而不是[self setNeedsLayout];