ipad控件uipopoverpresentationcontroller使用iphone可用

怡情_老二 怡情_老二     2022-08-19     290

关键词:

  ✨UIPopoverController 在iOS9之后被废弃了,,,
iOS8 新控件UIPopoverPresentationController可运用在iphone和iPad上,使用基本同 UIPopoverController
  • - (void)iPadAndIphonePopOver {
        MenuViewController *menuVC = [[MenuViewController alloc] init];
        menuVC.modalPresentationStyle = UIModalPresentationPopover;
        menuVC.popoverPresentationController.sourceView = self.view;
        menuVC.popoverPresentationController.sourceRect = self.testButton.frame;
        menuVC.popoverPresentationController.permittedArrowDirections = UIPopoverArrowDirectionUp;
        [self presentViewController:menuVC animated:YES completion:nil];
    }
  
 
code2:
* - (IBAction)popOver:(id)sender {
    AddressViewController *contentVC = [[AddressViewController alloc] init];
    contentVC.modalPresentationStyle = UIModalPresentationPopover;
    contentVC.popoverPresentationController.sourceView = self.view;
    contentVC.popoverPresentationController.sourceRect = CGRectMake(100, 100, 100, 100);
    contentVC.popoverPresentationController.permittedArrowDirections = UIPopoverArrowDirectionUp;
    [self presentViewController:contentVC animated:YES completion:nil];
}
* AddressViewController.m
* #import "AddressViewController.h"

@interface AddressViewController () <UITableViewDelegate, UITableViewDataSource>

@property (weak, nonatomic) IBOutlet UITableView *masterTableView; // 省份tableView
@property (weak, nonatomic) IBOutlet UITableView *detailTableView; // 地区tableView

@property (nonatomic, strong) NSArray *masterDataSource;           // 省份数据源
@property (nonatomic, strong) NSArray *detailDataSource;           // 地区数据源
@property (nonatomic, assign) int masterIndex;                     // 选中的省份

@end

@implementation AddressViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    _masterIndex = 0;
    self.preferredContentSize = CGSizeMake(150, 300);
}

- (NSArray *)masterDataSource {
    if (_masterDataSource == nil) {
        _masterDataSource = @[@"河南", @"河北", @"江苏", @"浙江", @"广东"];
    }
    return _masterDataSource;
}

- (NSArray *)detailDataSource {
    if (_detailDataSource == nil) {
        _detailDataSource = @[@[@"郑州", @"洛阳", @"周口", @"开封"],
                              @[@"石家庄", @"石家庄2"],
                              @[@"南京", @"苏州", @"淮安", @"淮北", @"句容"],
                              @[@"杭州", @"温州", @"台州", @"宁波", @"瑞安", @"苍南"],
                              @[@"广州", @"深圳"]
                              ];
    }
    return _detailDataSource;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if (tableView == self.masterTableView) {
        return self.masterDataSource.count;
    }

    if (tableView == self.detailTableView) {
        return [self.detailDataSource[_masterIndex] count];
    }
    return 0;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (tableView == self.masterTableView) {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"master"];
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"master"];
        }
        cell.textLabel.text = self.masterDataSource[indexPath.row];
        return cell;
    }
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"detail"];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"detail"];
    }
    cell.textLabel.text = self.detailDataSource[_masterIndex][indexPath.row];
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (tableView == _masterTableView) {
        _masterIndex = (int)indexPath.row;
        self.preferredContentSize = CGSizeMake(300, 300);
        [_detailTableView reloadData];
    }
    
    if (tableView == _detailTableView) {
        self.preferredContentSize = CGSizeMake(150, 300);
        [_detailTableView reloadData];
    }
}

@end

  

    

 
注意:如果要去掉箭头 permittedArrowDirections = 0;  并且要在设置了 sourceView, sourceRect 之后才会生效
 
 ✨以上都是在iPad上面使用,但是如果在iPhone上使用的话默认就会占满全屏幕,
解决办法是遵循UIPopoverPresentationControllerDelegate 实现adaptivePresentationStyleForPresentationController:代理方法覆盖默认的自适应行为
  • - (void)iPadAndIphonePopOver {
        MenuViewController *menuVC = [[MenuViewController alloc] init];
        menuVC.modalPresentationStyle = UIModalPresentationPopover;
        menuVC.popoverPresentationController.sourceView = self.view;
        menuVC.popoverPresentationController.sourceRect = self.test22.frame;
        menuVC.popoverPresentationController.permittedArrowDirections = UIPopoverArrowDirectionUp;
        menuVC.popoverPresentationController.delegate = self;
        [self presentViewController:menuVC animated:YES completion:nil];
    }
 
  • - (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller {
        return UIModalPresentationNone;
    }
  • // 是否可以dismiss,返回YES代表可以,返回NO代表不可以
    - (BOOL)popoverPresentationControllerShouldDismissPopover:(UIPopoverPresentationController *)popoverPresentationController {
        return NO;
    }
   ✨另外值得注意的一点是,preferredContentSize 应该在 presentedViewController 中实现,也可以重写preferredContentSize 的set get 方法来根据不同的新情况返回不同的尺寸
 
 

ipad控件uipopovercontroller使用

UIPopoverController是iPad特有控件,(iOS7-9),在iOS9之后别废弃使用步骤设置内容控制器UIPopoverController直接继承NSObject,不具备可视化能力。所以一定要指定一个继承自UIViewController的“内容控制器”来提供内容设置内容的尺寸在屏... 查看详情

在 Ipad 中通过 XML Parsing 生成动态控件

】在Ipad中通过XMLParsing生成动态控件【英文标题】:GeneratedynamiccontrolsbyXMLParsinginIpad【发布时间】:2012-08-0405:12:46【问题描述】:任何机构都可以帮助我。我想创建一个动态视图。我想在其中添加动态控件。这些控件来自xml。并... 查看详情

带有 PopOver 控件的 IPad 按钮下拉菜单

】带有PopOver控件的IPad按钮下拉菜单【英文标题】:IPadButtonDropDownwithPopOverControl【发布时间】:2011-04-0417:26:37【问题描述】:我正在开发一个iPad应用程序,并尝试在我的应用程序中实现一系列下拉列表。我有一个自定义按钮,它... 查看详情

如何在 iPad/iPhone 中实现 VERTICAL 页面控件

】如何在iPad/iPhone中实现VERTICAL页面控件【英文标题】:HowtoimplementVERTICALpagecontroliniPad/iPhone【发布时间】:2011-05-2514:44:48【问题描述】:我知道实现水平页面控制的过程。但我很想知道我们是否可以实现页面控制VERTICALLY。例如,... 查看详情

没有控件的 iPad html5 视频?

】没有控件的iPadhtml5视频?【英文标题】:iPadhtml5videowithNOcontrols?【发布时间】:2012-06-0701:04:34【问题描述】:这让我一整天都在想,但我不知道如何让html5视频播放器在没有本机控件的情况下工作。我不想要任何控件,但如果... 查看详情

用于 Ipad 浏览图像列表的 UI 控件

】用于Ipad浏览图像列表的UI控件【英文标题】:AUIcontrolforIpadtobrosealistofimages【发布时间】:2010-09-3012:37:37【问题描述】:我决定使用monotouch来开发一个浏览rss提要并显示图像网格的应用程序,就像在设备上实际浏览图片库一样... 查看详情

类似于 ipad 默认日历应用的滑块控件

】类似于ipad默认日历应用的滑块控件【英文标题】:slidercontrolsimilartoipaddefaultcalendarapp【发布时间】:2011-05-0314:11:48【问题描述】:我想知道如何实现类似于Ipad默认日历应用程序中的滑块。我已经附上了下面的图片如果您在底... 查看详情

JQuery jPlayer自动播放在ipad上不起作用如何显示控件

】JQueryjPlayer自动播放在ipad上不起作用如何显示控件【英文标题】:JQueryjPlayerautoplaynotworkingonipadhowtoshowcontrols【发布时间】:2012-06-0705:25:11【问题描述】:我正在使用jPlayer在网页上播放视频,使其与桌面浏览器和iPad兼容。我正... 查看详情

获取Objective C IPad App中任何控件的绝对位置

】获取ObjectiveCIPadApp中任何控件的绝对位置【英文标题】:GetAbsolutelocationofAnyControlinObjectiveCIPadApp【发布时间】:2011-09-1523:06:08【问题描述】:我想知道是否有任何方法可以在ipad/iphone应用程序中获取控件的绝对位置。例如我有一... 查看详情

视图在 ipad 上向上移动,但并非每个控件都在 iphone 上移动

】视图在ipad上向上移动,但并非每个控件都在iphone上移动【英文标题】:viewmovesuponipadbutnoteverycontrolmovesoniphone【发布时间】:2012-07-2208:31:12【问题描述】:我从堆栈溢出答案中实现了这个功能,第一个答案Moveviewwhensothatkeyboarddoe... 查看详情

Html 5 [input type=Date] 控件,最大日期在 iPhone/Ipad 中不起作用

】Html5[inputtype=Date]控件,最大日期在iPhone/Ipad中不起作用【英文标题】:Html5[inputtype=Date]control,MAXdateisnotworkinginiPhone/Ipad【发布时间】:2015-01-1119:17:03【问题描述】:您好。使用html日期输入控件。输入类型="日期"max="2014-13-11"在chro... 查看详情

iPhone/iPad 上的视频控制叠加

...个web应用程序,我需要在其中显示视频和一些(非标准)控件,这些控件应该出现在叠加层中。所以创建一些div并将它们放置在视频上,具有更高的z-index。不过,在iPhone和iPad上,这些控件似乎不可点击。我为单击事件注册了操... 查看详情

iPad 的报告查看器

...以通过ReportViewerContol实现吗?如果没有,是否有任何其他控件,例如可以满足要求的报表查看器控件...我还有哪些其他选择?非常感谢任何帮助。【问题讨论】:不久前对同样的问题做了一些研究, 查看详情

图像不在 iPad AIR 上显示,但在其他 iPad 上显示

...它们没有显示在图像视图或按钮上。除了我的图像,分段控件图像也没有显示,尽管我仍然可以点击我知道它们存在于UI上的按钮和分段控件。我发现我的按钮上的背景图像确实显示,但我的按钮上的图像没有。也许这会有所 查看详情

ipadactionsjeet

在iphone和ipad上使用UIActionShee控件t的效果会不一样,在苹果的官方文档中有相关说明:在ipad上使用UIActionSheet控件改控件不再从底部弹出,而是从屏幕中间弹出与UIAlertView警告框弹出有点类似。效果如图所示,cancelButton按钮文字显... 查看详情

iPad 中的 MPMoviePlayerController 全屏怪癖

...在视图控制器中显示MPMoviePlayerController并让用户使用默认控件切换全屏,例如YouTube应用。我在一个简单的示例中使用以下代码:-(void)viewDidLoad[superv 查看详情

覆盖在 ipad 中动态插入的视频标签

...桌面上运行良好,我什至设法在ipad上添加了我的自定义控件。到目前为止一切顺利。问题是我正在动态创建和插入视频元素,这会使ipad有点混乱。我采用这种方法是因为我发 查看详情

iPad UITableView 滚动弹回顶部

...【发布时间】:2011-01-3012:25:48【问题描述】:我在UIPopOver控件的UINavigationview中有一个UITableView。当用户滚动UITableView时,一旦松开,视图就会滚动回顶部。如何告诉UITableView停留在滚动到的位置?【问题讨论】:【参考方案1】:... 查看详情