如何使用iOS8在UIAlertController中设置UITableView的位置和大小

时间:2015-02-23 14:31:04

标签: ios uitableview autolayout uialertcontroller

我想用iOS8在UIAlertController中构建一个UITableView。

我想要下面的效果,这是iOS8原创组件,弹出alertview和UITableView内部。

enter image description here

我尝试在UIAlertController中构建UITableVIew,但我不知道如何设置像照片一样的大小和位置。

有没有人知道如何在UIAlertController中调整UITableView的位置和大小?

我的代码如下:

 @interface ViewController ()
 @property (nonatomic,strong) UITableView *tableView;
 @property(strong,nonatomic) NSMutableArray *titleArray;
 @end

 @implementation ViewController

 - (void)viewDidLoad {
     [super viewDidLoad];
  self.titleArray = [[UIFont familyNames] mutableCopy];
     for(int i = 0; i < 100; i++) {
         [self.titleArray addObjectsFromArray:[UIFont familyNames]];
     }

      dispatch_async(dispatch_get_main_queue(), ^{
          [self showUIAlertTable];
      });

 }

 -(void) showUIAlertTable
 {
     UIAlertController *alert = [UIAlertController      alertControllerWithTitle:nil
                                                                    message:@"select network\n\n\n"
                                                             preferredStyle:UIAlertControllerStyleAlert];


     self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds      style:UITableViewStylePlain];
     self.tableView.dataSource = self;
     self.tableView.delegate = self;

     [alert.view addSubview:self.tableView];
     [self presentViewController:alert animated:NO completion:nil];

 }


 #pragma mark - UITableViewDataSource Methods

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
 {
     return 1;
 }

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:     (NSInteger)section
 {
     return [self.titleArray 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.textLabel.text = [self.titleArray objectAtIndex:indexPath.row];
     [cell setNeedsUpdateConstraints];

     return cell;
 }

下面的代码效果运行效果:

enter image description here

这不是我期望的效果。

有没有人可以教我如何解决?

非常感谢。

(我使用了自动布局)

1 个答案:

答案 0 :(得分:1)

UIAlertController似乎暴露了一个非常有限的API,用于某些“操作”,“文本字段”和取消按钮的特定情况......

如果您想要执行任何其他布局,只需构建特定的UIViewController,并自定义其演示文稿。 (Here's an example

所有这些仅与iOS 8及更高版本兼容,如果您需要支持iOS 7,则需要其他黑客...