zoukankan      html  css  js  c++  java
  • iOS UIPopoverView的使用

     UIViewController *contentViewController = [[UIViewController alloc] init];
        contentViewController.view.backgroundColor = [UIColor yellowColor];
        
        UIPopoverController *popController = [[UIPopoverController alloc] initWithContentViewController:contentViewController];
    //    popController.popoverBackgroundViewClass = [PopoverBackgroundView class];
        popController.popoverContentSize = CGSizeMake(300.0f, 100);
        self.popController = popController;
        
        UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
        button.frame = CGRectMake(20, 20, 100, 30);
        button.backgroundColor = [UIColor redColor];
        [button addTarget:self action:@selector(buttonAction) forControlEvents:UIControlEventTouchUpInside];
        [contentViewController.view addSubview:button];
        
        [self.popController presentPopoverFromBarButtonItem:sender
                                   permittedArrowDirections:UIPopoverArrowDirectionUp
                                                   animated:YES];

    也可以自定义背景

    #import <UIKit/UIKit.h>
    @interface PopoverBackgroundView : UIPopoverBackgroundView
    @end
    #import "PopoverBackgroundView.h"
    #define kArrowBase 30.0f
    #define kArrowHeight 20.0f
    #define kBorderInset 0.0f
    
    @interface PopoverBackgroundView()
    @property (nonatomic, strong) UIImageView *arrowImageView;
    - (UIImage *)drawArrowImage:(CGSize)size;
    @end
    
    
    @implementation PopoverBackgroundView
    
    @synthesize arrowDirection  = _arrowDirection;
    @synthesize arrowOffset     = _arrowOffset;
    
    #pragma mark - Graphics Methods
    - (UIImage *)drawArrowImage:(CGSize)size
    {
        UIGraphicsBeginImageContextWithOptions(size, NO, 0);
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        [[UIColor clearColor] setFill];
        CGContextFillRect(ctx, CGRectMake(0.0f, 0.0f, size.width, size.height));
        
        CGMutablePathRef arrowPath = CGPathCreateMutable();
        CGPathMoveToPoint(arrowPath, NULL, (size.width/2.0f), 0.0f); //Top Center
        CGPathAddLineToPoint(arrowPath, NULL, size.width, size.height); //Bottom Right
        CGPathAddLineToPoint(arrowPath, NULL, 0.0f, size.height); //Bottom Right
        CGPathCloseSubpath(arrowPath);
        CGContextAddPath(ctx, arrowPath);
        CGPathRelease(arrowPath);
        
        UIColor *fillColor = [UIColor yellowColor];
        CGContextSetFillColorWithColor(ctx, fillColor.CGColor);
        CGContextDrawPath(ctx, kCGPathFill);
        
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return image;
        
    }
    
    
    #pragma mark - UIPopoverBackgroundView Overrides
    - (id)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self) {
            self.backgroundColor = [UIColor clearColor];
            
            //TODO: update with border image view
            UIImageView *arrowImageView = [[UIImageView alloc] initWithFrame:CGRectZero];
            self.arrowImageView = arrowImageView;
            [self addSubview:self.arrowImageView];
            
        }
        return self;
    }
    
    + (CGFloat)arrowBase
    {
        return kArrowBase;
    }
    
    + (CGFloat)arrowHeight
    {
        return kArrowHeight;
    }
    
    + (UIEdgeInsets)contentViewInsets
    {
        return UIEdgeInsetsMake(kBorderInset, kBorderInset, kBorderInset, kBorderInset);
    }
    
    + (BOOL)wantsDefaultContentAppearance
    {
        return NO;
    }
    
    - (void)layoutSubviews
    {
        [super layoutSubviews];
        
        //TODO: test for arrow UIPopoverArrowDirection
        CGSize arrowSize = CGSizeMake([[self class] arrowBase], [[self class] arrowHeight]);
        self.arrowImageView.image = [self drawArrowImage:arrowSize];
        
        self.arrowImageView.frame = CGRectMake(((self.bounds.size.width - arrowSize.width)- kBorderInset), 0.0f, arrowSize.width, arrowSize.height);
        
    }
  • 相关阅读:
    Intent 传递Map数据
    android 读取.properties文件
    android 复制到剪切板
    SVN Update Error: Please execute the 'Cleanup' command
    Win8安装程序出现2502、2503错误解决方法
    启动系统自带的应用程序
    解决底部Button遮挡ListView最后一项内容的bug
    Intent传递list集合时异常解决
    Tomcate 启动异常,java.net.BindException: Address already in use: JVM_Bind:80的解决办法
    【Web】阿里icon图标gulp插件(gulp-qc-iconfont)
  • 原文地址:https://www.cnblogs.com/keyan1102/p/4728771.html
Copyright © 2011-2022 走看看