iOS开发基础知识--碎片11

iOS开发基础知识--碎片11 

1:AFNetwork判断网络状态

#import “AFNetworkActivityIndicatorManager.h"

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //网络
    [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES];
    [[AFNetworkReachabilityManager sharedManager] startMonitoring];
    //网络状态判断
    [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        switch (status) {
            case AFNetworkReachabilityStatusNotReachable:{
                [self showMBPHudTipStr:@"当前无网络连接"];
                break;
            }
            case AFNetworkReachabilityStatusReachableViaWiFi:{
                [LogUtil logUtilstring:@"WiFi网络"];
                break;
            }
            case AFNetworkReachabilityStatusReachableViaWWAN:{
                [self showMBPHudTipStr:@"无线网络"];
                break;
            }
            default:
                break;
        }
    }];

    return YES;
}

2:UIButton倒计时

当在倒计时uibutton不能被响应事件;

-(void)startTime{
    __block int timeout=60; //倒计时时间
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);
    dispatch_source_set_timer(_timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒执行
    dispatch_source_set_event_handler(_timer, ^{
        if(timeout<=0){ //倒计时结束,关闭
            dispatch_source_cancel(_timer);
            dispatch_async(dispatch_get_main_queue(), ^{
                //设置界面的按钮显示 根据自己需求设置
                [self.againBtn setTitle:@"重发验证码" forState:UIControlStateNormal];
                self.againBtn.userInteractionEnabled = YES;
                [email protected]"没有收到验证码吗?";
                self.labNoMessage.textColor=[UIColor redColor];
            });
        }else{
            int seconds = timeout % 60;
            NSString *strTime = [NSString stringWithFormat:@"%.2d", seconds];
            dispatch_async(dispatch_get_main_queue(), ^{
                //设置界面的按钮显示 根据自己需求设置
                [self.againBtn setTitle:[NSString stringWithFormat:@"重发激活邮件(%@)",strTime] forState:UIControlStateNormal];
                self.againBtn.userInteractionEnabled = NO;
                [email protected]"激活邮件发送成功";
                self.labNoMessage.textColor=[UIColor colorWithHexString:@"84BF20"];

            });
            timeout--;

        }
    });
    dispatch_resume(_timer);

}

3:判断iphone设备

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_RETINA ([[UIScreen mainScreen] scale] >= 2.0)

#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)
#define SCREEN_MAX_LENGTH (MAX(SCREEN_WIDTH, SCREEN_HEIGHT))
#define SCREEN_MIN_LENGTH (MIN(SCREEN_WIDTH, SCREEN_HEIGHT))

#define IS_IPHONE_4_OR_LESS (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0)
#define IS_IPHONE_5 (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0)
#define IS_IPHONE_6P (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0)

4:在IOS8以下报一个自动布局的BUG,而在IOS8却能正常运行

会导致APP挂掉,BUG内容:
Terminating app due to uncaught exception ‘NSInternalInconsistencyException’, reason: ‘Auto Layout still required after executing -layoutSubviews. UITableView’s implementation of -layoutSubviews needs to call super.’

- (void)layoutSubviews
{
    //自动布局的内容放在super layoutSubviews前面
    [self _updateConstraints];

    [super layoutSubviews];
}

5:与JS交互,并把JS代码兼容android跟IOS

JS代码:

$(function () {
    var u = navigator.userAgent, app = navigator.appVersion;
    var isAndroid = u.indexOf(‘Android‘) > -1 || u.indexOf(‘Linux‘) > -1; //android终端或者uc浏览器
    var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端

    if (isAndroid) {
        $(‘#btn_Success‘).attr(‘href‘, ‘javascript:mailActive.backHome()‘);
    }
    else if (isiOS) {
        $(‘#btn_Success‘).attr(‘href‘, ‘protoclo://backHome‘);
    }
});

而IOS则是shouldStartLoadWithRequest:

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSString *newURL=[[request URL] absoluteString];
    if([newURL hasPrefix:@"protoclo://"])
    {
        NSArray *stringArray=[newURL componentsSeparatedByString:@"//"];
        if (stringArray.count>1&&[[stringArray objectAtIndex:1] isEqualToString:@"backHome"]) {
            [self webJavascriptBackHome];
        }
    }
    return YES;
}

注:比较好IOS的JS交互第三方插件WebViewJavascriptBridge[不错的关于如何使用这个插件的说明:http://www.henishuo.com/webviewjavascriptbridge-detail-use/];在IOS开发调试内嵌webView时可以用Safari进行调试,它可以设置出开发模式菜单,开发->ios simulator 就可以实现查看网页的运行详情(Safari->偏好设置-高级-在菜单中显示“开发”);

如果IOS要调用JS的方法可以使用stringByEvaluatingJavaScriptFromString 如下实例

IOS代码:

- (IBAction)sdfsdfsdf:(id)sender {
[self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"getMessageFromApp(‘%@‘)", @"加载结束调sdfsdf用方法"]];
}

Html代码:

<script type="text/javascript">
function getMessageFromApp(message){
var testDiv = document.getElementById("testDiv");
testDiv.innerText = message;
}
</script>

时间: 2024-08-05 02:32:09

iOS开发基础知识--碎片11的相关文章

IOS开发基础知识碎片-导航

1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可以存放,就是类NSNumber c:NSDATA与NSString互转 d:去除输入框空格(NSString也适用) f:IBOutlet,IBAction说明 2:IOS开发基础知识--碎片2  a:获得另一个控件器,并实现跳转 b:判断IOS版本 c:Button不同状态下背景图片 d:判断设备

iOS开发基础知识--碎片6

iOS开发基础知识--碎片6  三十三:IOS多视图跳转方法 第一种: 跳转:[self presentModalViewController:control animated:YES]; 返回:[self dismissModalViewControllerAnimated:YES]; 第二种: 跳转:[self.navigationController pushViewController:subTableViewController animated:YES]; 返回:[self.navi

iOS开发基础知识--碎片12

iOS开发基础知识--碎片12 1:Delegate运用 .h #import <UIKit/UIKit.h> @protocol FilterHeaderViewDelegate <NSObject> @required -(void)filterHeaderViewMoreBtnClicked:(id)sender; @end extern float CYLFilterHeaderViewHeigt; @interface FilterHeaderView : UIColle

iOS开发基础知识--碎片14

iOS开发基础知识--碎片14  1:ZIP文件压缩跟解压,使用ZipArchive 创建/添加一个zip包 ZipArchive* zipFile = [[ZipArchive alloc] init]; //次数得zipfilename需要一个完整得路径,例如***/Documents/demo.zip [zipFile CreateZipFile2:@"zipfilename"]; //有两种可选得方式进行创建压缩包,带密码和不带密码的 [[zipFile CreateZipFi

iOS开发基础知识--碎片8

iOS开发基础知识--碎片8  1:用UIImageView作为背景,但直接把按钮或者 UITextField放在上面无法相应事件. 解决办法:UIImageView默认的UserInteractionEnabled是NO,把它修改成YES,或者可以直接在XCODE上面的view有个属性勾选User Interaction Enabled 遇到的场景(在滚动视图里面放一个图片视图,在图片视图上又放置一个按键,发现一直没有响应效果); 2:AFnetWorking报"Request failed:

iOS开发基础知识--碎片46

iOS开发基础知识--碎片46  iOS开发基础知识--碎片46 1:带中文的URL处理 // http://static.tripbe.com/videofiles/视频/我的自拍视频.mp4 NSString *path = (__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL,(__bridge CFStringRef)model.mp4_url, CFSTR("

iOS开发基础知识--碎片17

iOS开发基础知识--碎片17 iOS开发基础知识--碎片17 1:contentSize.contentInset和contentOffset区别 contentSize 是scrollview中的一个属性,它代表scrollview中的可显示区域,假如有一个scrollview,它的frame为(0,0,320,480),而它的contentSize为(320,960).也就是说,这个scrollview整个内容的大小为(320,960),要通过上下滑动scrollview来查看(320,4

iOS开发基础知识--碎片32

 iOS开发基础知识--碎片32 1:动画属性UIViewAnimationOptions说明 a:常规动画属性设置(可以同时选择多个进行设置) UIViewAnimationOptionLayoutSubviews:动画过程中保证子视图跟随运动. UIViewAnimationOptionAllowUserInteraction:动画过程中允许用户交互. UIViewAnimationOptionBeginFromCurrentState:所有视图从当前状态开始运行. UIViewAnimat

iOS开发基础知识--碎片1

iOS开发基础知识--碎片1  一:NSString与NSInteger的互换 NSInteger转化NSString类型:[NSString stringWithFormat: @"%d", NSInteger]; NSString转化 NSInteger类型:NSInteger = [NSString intValue]; *其它几个同理 [NSString boolValue].[NSString floatValue].[NSString doubleValue] 二:Obje