ios之UIPopoverCtroller

不知道爲什麼網上很多文章對於UIPopoverCtroller這個控件很少詳細的描述。

下面我就把我遇到的這個問題說一下

剛開始接觸UIPopoverCtroller這個的時候,只知道它是個浮窗。類似於一個下拉列表。

本人很笨用了一天的時間才知道這個怎麼用。滿滿都是淚呀。什麼都不說了。

還是用故事版來決定我們的佈局。

我們現在看到了故事版中我們有個ViewController和一個tableviewController這個tableviewController就是我們的PopoverCtroller.

因爲我們的PopoverController包含着TableviewController,我們再這裏就比較方便使用了。

我們要創建一個ViewController的頭文件(.h)和(.m)文件還有一個就是tableviwController的PopControler的.h和.m文件

在ViewController中我們一定要實現寫上這個協議,否則的話我們就無法點擊選中文本後讓PoP消失了,這個坑可把我害苦了。

@interface UIViewController : UIViewController<UIPopoverControllerDelegate>
- (IBAction)showPop:(id)sender;//這個就是我們用的圖中的button你也可以用導航按鈕,我還是比較喜歡用普通按鈕來代替呢。
@property(nonatomic,strong)UIPopoverController *pop; //這裏一定要聲明這是在.m文件裏實現的

- (IBAction)showPop:(id)sender {

    UIPopController *popoverViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PopController"];
    
    if (self.pop == nil) {
        
        self.pop  = [[UIPopoverController alloc] initWithContentViewController:popoverViewController];
        
    }
//這裏呢就是我們要定位,要讓pop在那裏顯示,我們定位到的在一個文本上顯示,忽略我腦子笨,在viewCtronnler中忘記了放lable
       [self.pop presentPopoverFromRect:_typeText.frame inView:_typeText.superview permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];

//這裏就是來接受我們在popctrol中的值顯示在文本上呢
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(setNewVal:) name:@"update" object:nil];
    

}
//這個方法就是我們給文本賦值的呢
-(void) setNewVal:(NSNotification*)notifi
{
    
    self.typeText.text = [notifi.userInfo objectForKey:@"Value"]; //這句就是選中之後pop就消失了,這句話可把我害苦了。腦子太笨。。。。

        [self.pop dismissPopoverAnimated:YES];
}
我們看到了一個UIPopController 這個類那我們接下來喲創建這個文件了。剛纔說pop裏面包含tableviwectroller這裏用法和tableviewController一樣的呢。就不細說了。
@interface UIPopController : UITableViewController

@property (nonatomic,strong) NSArray *listData;//這裏是我們聲明的數組,顯示的下拉列表
@property (nonatomic,strong)NSString * titleString;//這裏是我們要用到的傳值呢


@end
.m實現文件
- (void)viewDidLoad
{
    [super viewDidLoad];
     self.listData = [[NSArray alloc] initWithObjects:@"全部類型",@"視頻",@"音頻",@"PPT",@"Word",@"其它", nil];
     //設置控制器在popovwe中的尺寸

    CGFloat maxH=MIN(480, self.listData.count*44);//我比較喜歡這種設置它的大小,不要吧pop的size設置固定,否則不好看。
    self.preferredContentSize=CGSizeMake(150, maxH);
    self.clearsSelectionOnViewWillAppear=NO;//這裏是我們選中之後,再打開便記住了它上次選中的位置。確實比android上好用一百倍。給個贊。
   }
關於tableview要必須實現的兩個方法我在這裏就不寫了呢。不懂的話,還是多看下大神的tableview的用法,這個還是很重要的呢。我這裏主要介紹下我們在pop選中的文本之後的情況呢
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    self.titleString= [self.listData objectAtIndex:indexPath.row];//當我們點擊pop中的每一項,我們要知道選中了什麼接受過來
    NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:self.titleString,@"Value",nil];//這裏是因爲我們的viewctroller要顯示出我們選中的文本,所以實驗了很多方法還是用NOtification比較靠譜。大愛呀。我們要把獲取到的東西放在一個字典裏,然後用notification給它傳遞過去。
    [[NSNotificationCenter defaultCenter]postNotificationName:@"update" object:self userInfo:dic];
 
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章