0

UIAlertView 内に UITableView を追加しようとしていますが、表示されません。アラートビューの「OK」ボタンと一緒にタイトルとメッセージが表示されます。

以下は私のコードで、iOS 7 で実行しています。

- (void)showDataReceivedAlert {

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Received Data" message:@"\n\n\n\n\n\n\n\n\n\n\n\n" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];

    UITableView *table = [[UITableView alloc]initWithFrame:CGRectMake(10, 40, 264, 120)];
    table.delegate = self;
    table.dataSource = self;
    table.backgroundColor = [UIColor clearColor];
    [alert addSubview:table];
    [alert show];
}


- (NSInteger)tableView:(UITableView *)iTableView numberOfRowsInSection:(NSInteger)iSection {
    return 6;
}


- (UITableViewCell *)tableView:(UITableView *)iTableView cellForRowAtIndexPath:(NSIndexPath *)iIndexPath {
    static NSString *identifier = @"iBeaconDataCell";
    UITableViewCell *cell = [iTableView dequeueReusableCellWithIdentifier:identifier];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:identifier];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        cell.accessoryType = UITableViewCellAccessoryNone;
    }

    NSString *cellText;
    NSString *cellLabelText;

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    NSData *encodedObject = [userDefaults objectForKey:@"data"];
    MyObj *myData = (MyObj *)[NSKeyedUnarchiver unarchiveObjectWithData:encodedObject];

    switch (iIndexPath.row) {
        case 0:
            cellText = @"Data 1";
            cellLabelText = [NSString stringWithFormat:@"%d", myData.data1];
            break;
        case 1:
            cellText = @"Data 2";
            cellLabelText = [NSString stringWithFormat:@"%d", myData.data2];
            break;
        case 2:
            cellText = @"Data 3";
            cellLabelText = [NSString stringWithFormat:@"%d", myData.data3];
            break;
        case 3:
            cellText = @"Data 4";
            cellLabelText = [NSString stringWithFormat:@"%d", myData.data4];
            break;
        case 4:
            cellText = @"Data 5";
            cellLabelText = [NSString stringWithFormat:@"%f", myData.data5];
            break;
        case 5:
            cellText = @"Data 6";
            cellLabelText = myData.data6;
            break;

        default:
            break;
    }

    cell.textLabel.text = cellText;

    UILabel *cellLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 150.0, 44.0)];
    cellLabel.text = cellLabelText;
    cell.accessoryView = cellLabel;

    return cell;
}
4

2 に答える 2

4

デフォルトのアラートは、サブビューを取得するためのものではありません。(ios6 以前では add.subviews がハッキングされる可能性がありますが、これは iOS7 では機能しません)

アラートのように見えて動作する独自のカスタム UIView を作成します。

自分でやりたくない場合は、周りにたくさんの実装があります:) たとえば、cocoacontrols.com

于 2013-09-26T22:47:14.103 に答える
0

iOS 7 からは、このように追加する必要があります

[alertview setValue:tableView forKey:@"accessoryView"];

于 2014-06-02T13:11:42.983 に答える