如何在iOS8的UIAlertController中添加UITableview ?

[英]How to add UITableview in UIAlertController in iOS8?


Till iOS7 in Custom view we can put tableview in alert as per below picture.

enter image description here

But in iOS8 UITableview is not working. I can put it in tableview but the tableview is not scrolling and not detecting any click on any cell.

enter image description here

So, how do I implement this type of AlertController ?

直到iOS7在自定义视图中,我们可以根据下图将tableview设置为警报。但在iOS8 UITableview中没有工作。我可以把它放到tableview中但是tableview没有滚动也没有检测到任何单元格上的点击。那么,我如何实现这种类型的AlertController呢?

2 个解决方案

#1


-2  

Please try below code with custom view and animations

请尝试以下代码自定义查看和动画

Test.h

Test.h

#import <UIKit/UIKit.h>

@interface Test : UIView <UITableViewDataSource,UITableViewDelegate>
{
    UITableView *table;
}

- (id)initWithFrame:(CGRect)frame Array:(NSArray *)ArrayValue;
- (void)showInView:(UIView *)aView animated:(BOOL)animated;
- (void)fadeOut;

@end

Test.m

Test.m

- (id)initWithFrame:(CGRect)frame Array:(NSArray *)ArrayValue
{
    if (self = [super initWithFrame:frame])
    {
        aryType = ArrayValue;
        table = [[UITableView alloc] initWithFrame:CGRectMake(15, 0, 320, 380) style:UITableViewStylePlain];
        table.dataSource = self;
        table.delegate = self;
        [table setSeparatorInset:UIEdgeInsetsZero];
        table.showsVerticalScrollIndicator = YES;
        [self addSubview:table];
    }
    return self;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return aryType.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];
        cell.selectionStyle = UITableViewCellSelectionStyleGray;
    }
    cell.textLabel.text = [aryType objectAtIndex:(indexPath.row)];
    cell.textLabel.font = [UIFont fontWithName:@"Avenir Next" size:16];
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    NSLog(@"select");
}

- (void)fadeIn
{
    self.transform = CGAffineTransformMakeScale(1.3, 1.3);
    self.alpha = 0;
    [UIView animateWithDuration:.35 animations:^{
        self.alpha = 1;
        self.transform = CGAffineTransformMakeScale(1, 1);
    }];
}

- (void)fadeOut
{
    [UIView animateWithDuration:.35 animations:^{
        self.transform = CGAffineTransformMakeScale(1.3, 1.3);
        self.alpha = 0.0;
    } completion:^(BOOL finished) {
        if (finished) {
            [self removeFromSuperview];
        }
    }];
}

- (void)showInView:(UIView *)aView animated:(BOOL)animated
{
    [aView addSubview:self];
    if (animated)
    {
        [self fadeIn];
    }
}

At last from your viewcontroller call this view as per below code
Viewcontroller.m

最后,从你的视图控制器调用这个视图,如下面的代码视图控制器。m

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSArray *aryType = [[NSArray alloc] initWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10", nil];
    [self showPopUpWithTitle:@"Title" arrOptions:aryType xy:CGPointMake(16, 150) size:CGSizeMake(287, 134)];
}

- (void)showPopUpWithTitle:(NSString *)popupTitle arrOptions:(NSArray *)arrOptions xy:(CGPoint)point size:(CGSize)size
{
    testView = [[Test alloc] initWithFrame:CGRectMake(15, point.y, size.width, 200.0) Array:arrOptions];
    [testView showInView:self.view animated:YES];
}

#2


7  

Courtesy StackOverFlow users i was able to do this task... here is my code...

承蒙StackOverFlow用户,我能完成这个任务……这是我的代码…

 UIViewController *controller = [[UIViewController alloc]init];
UITableView *alertTableView;
if (array.count < 4) {
    CGRect rect = CGRectMake(0, 0, 272, 100);
    [controller setPreferredContentSize:rect.size];
    alertTableView  = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, 272, 100)];
}
else if (array.count < 6){
    CGRect rect = CGRectMake(0, 0, 272, 150);
    [controller setPreferredContentSize:rect.size];
    alertTableView  = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, 272, 150)];
}
else if (array.count < 8){
    CGRect rect = CGRectMake(0, 0, 272, 200);
    [controller setPreferredContentSize:rect.size];
    alertTableView  = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, 272, 200)];
}
else{
    CGRect rect = CGRectMake(0, 0, 272, 250);
    [controller setPreferredContentSize:rect.size];
    alertTableView  = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, 272, 250)];
}

alertTableView.delegate = self;
alertTableView.dataSource = self;
alertTableView.tableFooterView = [[UIView alloc]initWithFrame:CGRectZero];
[alertTableView setSeparatorStyle:UITableViewCellSeparatorStyleSingleLine];
[alertTableView setTag:kAlertTableViewTag];
[controller.view addSubview:alertTableView];
[controller.view bringSubviewToFront:alertTableView];
[controller.view setUserInteractionEnabled:YES];
[alertTableView setUserInteractionEnabled:YES];
[alertTableView setAllowsSelection:YES];
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Title" message:@"Message" preferredStyle:UIAlertControllerStyleAlert];
[alertController setValue:controller forKey:@"contentViewController"];
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) {

}];
[alertController addAction:cancelAction];
[self presentViewController:alertController animated:YES completion:nil];

Checkout the snapshot here ;)

智能推荐

注意!

本站翻译的文章,版权归属于本站,未经许可禁止转摘,转摘请注明本文地址:http://www.silva-art.net/blog/2014/12/24/6f7726cba4589523ae4f0c8a8ea01aa2.html



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告