在自定义视图中直到iOS7,我们可以将tableview置于警告状态,如下图所示。
但是在iOS8中,UITableview无法正常工作。我可以把它放在tableview中,但tableview不滚动,也没有检测到任何单元格上的任何点击。
那么,我该如何实现这种类型的AlertController?
答案 0 :(得分:7)
礼貌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];
答案 1 :(得分:-2)
请尝试使用自定义视图和动画的代码
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
- (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];
}
}
最后从你的viewcontroller调用这个视图,如下面的代码所示 的 Viewcontroller.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];
}