我正在使用XCode 6.1而我没有“popover”选项。我的配置有问题吗?这是正常的吗?他们删除了吗?我现在如何呈现一个popover?
这适用于iPhone开发,而非iPad。
答案 0 :(得分:1)
Popover控制器仅适用于iPad设备。 尝试在其他设备上创建一个会导致异常。
如果你想使用像popover这样的东西,你将不得不使用第三方代码。
答案 1 :(得分:1)
你无论如何都要创建一个UIView,并让选择器启动它以使其具有相同的感觉:
以此图片为例:
视图可以这样做,通知filterView被添加到超级视图,因为我已经为视图设置了userInteractionEnabled为NO,因此用户被要求在继续使用视图之前选择一个选项,但是,它是可选的我只是指出来:
self.view.userInteractionEnabled = NO;
[self.navigationItem.rightBarButtonItem setEnabled:NO];
self.filterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 150, 150)];
float X_CO = (self.view.superview.bounds.size.width - self.filterView.frame.size.width)/2;
float Y_CO = (self.view.superview.bounds.size.width - self.filterView.frame.size.height)/2;
[self.filterView setFrame:CGRectMake(X_CO, Y_CO + 75, 150, 150)];
self.filterView.backgroundColor = [UIColor whiteColor];
self.filterView.layer.borderColor = [UIColor lightGrayColor].CGColor;
self.filterView.layer.borderWidth = 1.0f;
self.filterView.layer.cornerRadius = 8.0f;
self.filterView.layer.shadowColor = [UIColor blackColor].CGColor;
self.filterView.layer.shadowOpacity = 0.5f;
self.filterView.layer.shadowOffset = CGSizeMake(0, 1);
self.filterView.layer.masksToBounds = NO;
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 150, 50)];
titleLabel.textAlignment = NSTextAlignmentCenter;
titleLabel.text = @"Select Filter Option:";
titleLabel.font = [UIFont fontWithName:@"Eurostile" size:13];
titleLabel.textColor = [UIColor colorWithRed:48/255 green:131/255 blue:251/255 alpha:1];
[self.filterView addSubview:titleLabel];
self.azButton = [[UIButton alloc] initWithFrame:CGRectMake(10,self.filterView.frame.origin.y/3.5,30, 30)];
[self.azButton setBackgroundColor:[UIColor whiteColor]];
[self.azButton addTarget:self action:@selector(filterButton:) forControlEvents:UIControlEventTouchUpInside];
self.azButton.layer.borderColor = [UIColor lightGrayColor].CGColor;
self.azButton.layer.cornerRadius = 15.0f;
self.azButton.layer.borderWidth = 1.0f;
[self.filterView addSubview:self.azButton];
UILabel *azLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.azButton.frame.origin.x + 40, self.azButton.frame.origin.y, 95, 30)];
azLabel.textAlignment = NSTextAlignmentLeft;
azLabel.text = @"A-Z Sort";
azLabel.textColor = [UIColor blackColor];
azLabel.font = [UIFont fontWithName:@"Eurostile" size:20];
[self.filterView addSubview:azLabel];
self.zaButton = [[UIButton alloc] initWithFrame:CGRectMake(10, self.azButton.frame.origin.y + 40,30, 30)];
[self.zaButton setBackgroundColor:[UIColor whiteColor]];
[self.zaButton addTarget:self action:@selector(filterButton:) forControlEvents:UIControlEventTouchUpInside];
self.zaButton.layer.borderColor = [UIColor lightGrayColor].CGColor;
self.zaButton.layer.cornerRadius = 15.0f;
self.zaButton.layer.borderWidth = 1.0f;
[self.filterView addSubview:self.zaButton];
UILabel *zaLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.azButton.frame.origin.x + 40, self.zaButton.frame.origin.y, 95, 30)];
zaLabel.textAlignment = NSTextAlignmentLeft;
zaLabel.text = @"Z-A Sort";
zaLabel.textColor = [UIColor blackColor];
zaLabel.font = [UIFont fontWithName:@"Eurostile" size:20];
[self.filterView addSubview:zaLabel ];
[self.view.superview addSubview:self.filterView];
您可以添加背景图像以获得弹出视图的效果。
然后在用户触摸点调用它。
只是一个例子:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
UITouch *touch = [touches anyObject];
if ([touch.view isKindOfClass: UITableView.class]) {
//your touch was in a UITableView ... do whatever you have to do
}
}
然后用touchesEnded做同样的事情:然而还有很多其他的方法可以解决它。 (即找到确切的联系点等等,但这取决于你。
正如Duncan C指出的那样,还有其他免费提供的框架可供使用。
当然,你总是可以在storyboard或xib中创建它,这么多选项
答案 2 :(得分:0)
丹尼尔在帖子中说,UIPopoverController对象仅限iPad。
在iPhone上有第三方库可以提供相同的外观和感觉。我没有特别指出你,但看看Github。
答案 3 :(得分:0)
当您按住Control键并拖动到第二个VC时,您应该看到这个:
当您选择“popover presentation”时,生成的segue应如下所示:
这个选项肯定适用于iPhone,你应该看到它。如果没有,那么您的项目设置可能会出现问题。
然而,重要的是要注意,这与使用UIPopoverController不同。相反,它会调用{8}中的UIPopoverPresentationController新内容(我相信)。适用于iPhone,无需第三方框架。我目前正在iPhone项目中成功使用它,所以我知道它有效。
我相信@Daniel T.的回答虽然在早期版本中是正确的,但已被UIPopoverPresentationController淘汰。