iPad 控件 UIPopoverPresentationController 使用 iPhone可用

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 之后才会生效

时间: 2024-10-14 05:26:30

iPad 控件 UIPopoverPresentationController 使用 iPhone可用的相关文章

iPad 控件UIPopoverController使用

UIPopoverController 是iPad特有控件,(iOS7-9),在iOS9之后别废弃 使用步骤 设置内容控制器 UIPopoverController直接继承NSObject,不具备可视化能力.所以一定要指定一个继承自UIViewController的"内容控制器"来提供内容 设置内容的尺寸 在屏幕上显示的大小 从那个地方显示出来 code 新建一个VC类 MenuViewController 作为 UIPopoverController 的内容控制器, 在HomeVC增

js控件设置只读属性和不可用属性

介绍js实现只读的几种方法: 设置控件只读的话,我们要先清楚哪些没有readOlny这个属性 我知道的checkbox和RadioButton没有readOlny这个属性,我上一篇已经介绍了如何设置checkbox的只读了. 今天我们只是了解通用的控件只读和不可用 document.getELementById(textId).disabled=true;document.getElementById(textId).setAttribute("disabled", true);  d

银联手机支付控件官方使用指南(ios版)

目录 版本信息... 2 目录      3 1       概述... 1 2       支付流程介绍... 1 3       测试帐号... 2 4       iOS客户端... 3 4.1      SDK说明... 3 4.2       接口说明... 4 4.3       添加SDK包... 5 4.4       调用插件... 5 5       常见问题总结... 6 5.1      iOS平台常见问题... 6 1      概述 银联手机支付控件(以下简称支付控件

公共控件第二部

记住不就把鼠标停一会,都有中文提示. 1.LinkLabel在窗体上显示的内容,点击实现超链接(可以是文字,可以是图片) 2.ListBox多项选择中选一个 通过属性中的SelectionMode来实现多选 通过count来确定已经选择的个数 3.MaskedTextBox  有各种输入限制样式的文本框,如果用来输密码的话并不如textbox,掩码可以再属性里设置. 通过属性Task来选择判断规则 4.MonthCalendar日期选择器[不会缩小显示选择的日期,默认最大状态],就是一个日历框,

Python+selenium+eclipse执行web自动化(四)控件处理

元素定位后可根据页面元素的类型执行相关操作,一下使用element指代已定位的页面元素 1.输入框 包括文本输入框和密码输入框,可用操作有clear()和send_keys(),具体用法如下 element.clear()     #清空输入框当前内容element.send_keys("string") #项输入框发送字符串 2.单选框及复选框 可用操作有is_select()和click(),具体用法如下element.is_selected()   #判断当前选择控件是否被选中

ASP.NETserver控件使用之Reportviewer 报表

1.       Reportviewer 报表 1.1.       Reportviewer控件 注:本教程附2个事例: l  演练:在本地处理模式下将数据库数据源与 ReportViewer Web server控件一起使用 l  演练:在本地处理模式下将业务对象数据源与 ReportViewer Web server控件一起使用 假设您已经对ReportViewer控件基础知识比較了解,能够直接參阅事例. 1.1.1.                 简单介绍 Microsoft Vis

android——如何理解控件的宽高及layout_grivaty与grivaty的区别

关于Layout_width/height引发的宽高思考 方式一: 结果不符合预期. 运行结果: 方式二: 结果符合预期. 如下图: Android控件宽高的规则: Android下的控件默认没有宽高,是由父控件给其宽高的. 其中一般的view控件是由(ViewGroup控件:LinearLayout.RelativeLayout .TableLayout.FrameLayout .AbsoluteLayou )五大布局给其宽高的. 而像LinearLayout.RelativeLayout等这

小米3系统计算器自定义开关控件-MySwitchView

1.前言 在android4.0以后,有switch控件,类似于iPhone上面滑块的效果,但是只能用在4.0以后的系统中,之前的平台,就无法使用这种控件.近段时间,看到了小米3手机上自带的计算器app,有这样的效果,上面的一个控件,觉得很漂亮,并且与iPhone上的效果略有不同,于是自己动手编写了一下这个功能,在编写的过程中,参考过网上的一些demo,运行后,在控件滑动的时候,感觉动画不平滑,有卡顿的现象,反复修改,最后还是有一些问题,感觉是在滑动中的状态,没有合理的控制好.无奈只能参考Goo

Android UI设计之&lt;十二&gt;自定义View,实现绚丽的字体大小控制控件FontSliderBar

转载请注明出处:http://blog.csdn.net/llew2011/article/details/51668407 了解iOS的同学应该知道在iOS中有个UISliderBar控件,在iPhone手机中的设置文字大小中使用了该控件.近来产品提的需求中有一个是更改APP中部分字体大小,虽然技术难度不大但工作量还是有的,思路是利用LayoutInflater.Factory实现的(如果你对LayoutInflater.Factory不熟悉可以阅读之前写的Android 源码系列之<四>从