【IOS 开发学习总结-OC-49】★★ios开发之UI控件——UIStepper与UIWebView

【IOS 开发学习总结-OC-49】★★ios开发之UI控件——UIStepper与UIWebView

UIStepper——微调器

UIStepper如下图,控件上包括+,—两个按钮。——用于控制某个值的增,减。继承与 UIControl 基类,默认是活动控件,可与用户进行交互。

UIStepper属性面板:

这里写图片描述
属性说明:
- value:

  1. minimum,maximum:——该控件最小值,最大值;
  2. current:UIStepper控件当前值。
  3. step:控制UIStepper每次数值变化的步长。


  • behavior:

  1. autorepeat: 默认为 YES,表示用户按住加号不松手,数字会持续变化;
  2. continuous(连续的):默认为 YES,表示用户交互时会立即发送 value changed 事件,NO则表示只有等用户交互结束时才发送 value changed 事件。
  3. wrap(包,裹):默认为 NO。当为 YES时,当 value 增加到最大值时,会变成最小值;若减到比最小值还小,将自动变为最大值。

如何更改UIStepper的外观

调用该控件的如下相关方法为该控件的特定状态设置图片,以此来定制控件外观。

// the glyph image for the plus/increase button——增加按钮的图片设置与获取
- (void)setIncrementImage:(nullable UIImage *)image forState:(UIControlState)state NS_AVAILABLE_IOS(6_0) UI_APPEARANCE_SELECTOR;

- (nullable UIImage *)incrementImageForState:(UIControlState)state NS_AVAILABLE_IOS(6_0) UI_APPEARANCE_SELECTOR;

// the glyph image for the minus/decrease button——减小按钮的图片设置与获取
- (void)setDecrementImage:(nullable UIImage *)image forState:(UIControlState)state NS_AVAILABLE_IOS(6_0) UI_APPEARANCE_SELECTOR;

- (nullable UIImage *)decrementImageForState:(UIControlState)state NS_AVAILABLE_IOS(6_0) UI_APPEARANCE_SELECTOR;

示例程序:
代码下载:UIStepper功能及更改外观示例代码下载

这里写图片描述
关键代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // 自定义该UIStepper的减号按钮的图片
    [self.stepper setDecrementImage:[UIImage imageNamed:@"minus.gif"]
        forState:UIControlStateNormal];
    // 自定义该UIStepper的减号按钮的图片
    [self.stepper setIncrementImage:[UIImage imageNamed:@"plus.gif"]
        forState:UIControlStateNormal];

}

- (IBAction)valueChanged:(UIStepper*)sender {
    // 分别使用3个UITextField显示对应UIStepper的值
    switch (sender.tag) {
        case 1:
            self.tf1.text = [NSString stringWithFormat:@"%g", sender.value];
            break;
        case 2:
            self.tf2.text = [NSString stringWithFormat:@"%g"
, sender.value];
            break;
        case 3:
            self.tf3.text = [NSString stringWithFormat:@"%g"
, sender.value];
            break;
    }
}

UIWebView——网页控件

我们可以用UIWebView控件实现一个内置的浏览器,而且可以将这个浏览器内嵌到应用的任意位置。

UIWebView继承与 UIView 基类,一般不能与用户交互。
添加该控件也有2种方式,interface builder 中拖拽添加或者代码进行创建。

UIWebView控件的属性面板:

这里写图片描述
1. scaling:scales page to fit.——控制是否缩放网页以适应该控件;
2. detection: 对应 dataDetectorTypes 属性,该属性有如下枚举值

 typedef NS_OPTIONS(NSUInteger, UIDataDetectorTypes) {
    UIDataDetectorTypePhoneNumber                              = 1 << 0,          // Phone number detection——检测网页上的电话号码,点击号码可拨号
    UIDataDetectorTypeLink                                     = 1 << 1,          // URL detection——检测网页上的链接
    UIDataDetectorTypeAddress NS_ENUM_AVAILABLE_IOS(4_0)       = 1 << 2,          // Street address detection ——检测网页上的地址
    UIDataDetectorTypeCalendarEvent NS_ENUM_AVAILABLE_IOS(4_0) = 1 << 3,          // Event detection ——事件检测,日历事件

    UIDataDetectorTypeNone          = 0,               // No detection at all——不检测网页任何内容
    UIDataDetectorTypeAll           = NSUIntegerMax    // All types——检测网页上所有特殊内容
};
  1. pagination:对应paginationMode属性。有5个选项,这5个枚举值是:

    typedef NS_ENUM(NSInteger, UIWebPaginationMode) {
    UIWebPaginationModeUnpaginated,
    UIWebPaginationModeLeftToRight,
    UIWebPaginationModeTopToBottom,
    UIWebPaginationModeBottomToTop,
    UIWebPaginationModeRightToLeft
    };

  2. 除了上面几类属性外,还有:

    • @property (nonatomic) BOOL allowsInlineMediaPlayback NS_AVAILABLE_IOS(4_0); // iPhone Safari defaults to NO. iPad Safari defaults to YES
      **官方解释:**A Boolean value that determines whether HTML5 videos play inline or use the native full-screen controller.

    • @property (nonatomic) BOOL mediaPlaybackRequiresUserAction NS_AVAILABLE_IOS(4_0); // iPhone and iPad Safari both default to YES
      **官方解释:**A Boolean value that determines whether HTML5 videos can play automatically or require the user to start playing them.

    • mediaPlaybackAllowsAirPlay
      **官方解释:**A Boolean value that determines whether Air Play is allowed from this view.
    • keyboardDisplayRequiresUserAction
      **官方解释:**A Boolean value indicating whether web content can programmatically display the keyboard.
    • suppressesIncrementalRendering:
      **官方解释:**A Boolean value indicating whether the web view suppresses content rendering until it is fully loaded into memory.
  3. 其他属性可以到相关头文件中查看。

UIWebView加载内容

- (void)loadRequest:(NSURLRequest *)request;——加载并指定 URL 对应的网页;
- (void)loadHTMLString:(NSString *)string baseURL:(nullable NSURL *)baseURL;——加载并显示 HTML 字符串;

- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)textEncodingName baseURL:(NSURL *)baseURL;——该方法参考文章: 总结关于iPhone中UIWEBVIEW读取本地GBK编码格式html

对UIWebView进行导航控制的方法

- (void)reload;//重新加载网页
- (void)stopLoading;//停止加载网页

- (void)goBack;//后退
- (void)goForward;//前进

UIWebView与JavaScript交互时用到的方法

- (nullable NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;——获得UIWebView的标题。该方法是UIWebView与JavaScript交互时时能用到的方法,——使用可以参考文章:stringByEvaluatingJavaScriptFromString的使用方法UIWebView与JavaScript交互

UIWebView在加载网页时可以设置的代理/委托 delegate

对象必须实现UIWebViewDelegate 协议。该协议中包含的方法:

@protocol UIWebViewDelegate <NSObject>

@optional
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;//webView将要开始加载指定 URL 对应网页时激发的方法
- (void)webViewDidStartLoad:(UIWebView *)webView;//webView开始加载时激发该方法
- (void)webViewDidFinishLoad:(UIWebView *)webView;//webView完成加载时激发该方法
- (void)webView:(UIWebView *)webView didFailLoadWithError:(nullable NSError *)error;//加载出错时激发该方法

@end

实例——简易浏览器:

Alt text
这里写图片描述
因为 ios9中苹果将原http协议改成了https协议,使用 TLS1.2 SSL加密请求数据。 所以我们用以前的方法加载的时候,会报错无法加载。这里用了一个方法方便我们看到效果。方法链接:【ios编程报错处理-1】错误提示:App transport security has blocked a exceptions can be configured via your app’s

源码下载:实例——简易浏览器

实现代码:

#import "FKViewController.h"

@interface FKViewController ()

@end

@implementation FKViewController
UIActivityIndicatorView* activityIndicator;
- (void)viewDidLoad
{
    [super viewDidLoad];
    // 设置自动缩放网页以是适应该控件。
    self.webView.scalesPageToFit = YES;
    // 为UIWebView控件设置委托
    self.webView.delegate = self;
    // 创建一个UIActivityIndicatorView控件
    activityIndicator = [[UIActivityIndicatorView alloc]
        initWithFrame : CGRectMake(0.0f, 0.0f, 32.0f, 32.0f)];
    // 控制UIActivityIndicatorView显示在当前View的中央。
    [activityIndicator setCenter: self.view.center] ;
    activityIndicator.activityIndicatorViewStyle
        = UIActivityIndicatorViewStyleWhiteLarge;
    [self.view addSubview : activityIndicator];
    // 隐藏activityIndicator控件
    activityIndicator.hidden = YES;
    [self goClicked:nil];
}
// 当UIWebView开始加载时激发该方法
- (void)webViewDidStartLoad:(UIWebView *)webView
{
    // 显示activityIndicator控件
    activityIndicator.hidden = NO;
    // 启动activityIndicator控件的转动
    [activityIndicator startAnimating] ;
}
// 当UIWebView加载完成时激发该方法
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    // 停止activityIndicator控件的转动
    [activityIndicator stopAnimating];
    // 隐藏activityIndicator控件
    activityIndicator.hidden = YES;
}
// 当UIWebView加载失败时激发该方法
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    // 使用UIAlertView显示错误信息
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@""
        message:[error localizedDescription]
        delegate:nil
        cancelButtonTitle:nil
        otherButtonTitles:@"确定", nil];
    [alert show];
}
- (IBAction)goClicked:(id)sender {
    [self.addr resignFirstResponder];
    // 获取用户输入的字符串
    NSString* reqAddr = self.addr.text;
    // 如果reqAddr不以http://开头,为该用户输入的网址添加http://前缀
    if (![reqAddr hasPrefix:@"https://"]) {
        reqAddr = [NSString stringWithFormat:@"https://%@" , reqAddr];
        self.addr.text = reqAddr;
    }
    NSURLRequest* request = [NSURLRequest requestWithURL:
        [NSURL URLWithString:reqAddr]];
    // 加载指定URL对应的网址
    [self.webView loadRequest:request];
}
@end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值