美文网首页
阶段性总结

阶段性总结

作者: Rim99 | 来源:发表于2015-09-07 10:37 被阅读140次

写了几天的代码,感觉确实有不少提升。目前基本的UI界面已经搭建的差不多了,但更高级的功能,比如收藏夹,夜间模式,页內搜索,关闭图片都还没有实现。

今天决定总结一下这几天的收获,方便以后查阅。

1.Storyboard 和 self.view 的关系

Storyboard中可以添加控件,self.view也可以做添加控件。那他们一样么?

我在搭建浏览器UI界面时发现:Storyboard添加的控件处于最底层,利用self.view执行addSubview:而得到的控件是覆盖在Storyboard之上的。

2.按键功能的代码实现

在Storyboard中,添加按钮和实现IBAction功能是一件很惬意的事情。鼠标拖拖拽拽,添加几个名称就搞定了。但是如果按钮是用代码initWithFrame:实现的呢?那怎样给按钮添加功能呢?

答案是:

[“按键名称” addTarget:self action:@selector( “方法名称” ) forControlEvents:UIControlEventTouchUpInside];

3.页面跳转的代码实现

和上一条情况类似。

首先得指定Storyboard和其中的对应UIViewController。在Storyboard中设置好对应UIViewController的StoryboardID。

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *targetViewController = [storyBoard instantiateViewControllerWithIdentifier:@"targetViewID"];
[self showViewController:targetViewController sender:self];

4.页面与键盘的随动功能

我的浏览器将地址栏设在屏幕下方,利用self.view执行addSubview:会出现一个bug:点击地址栏弹出的键盘将地址栏给覆盖了,只能盲输。完全不能忍!

Stackoverflow给出了一个很不错的方法:基于苹果官方的代码 ,并作了部分修改。
http://stackoverflow.com/a/4837510/5243422
https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html#//apple_ref/doc/uid/TP40009542-CH5-SW7

这一方案是首先在self.view上添加一个UIScrollView,将WkWebview添加在UIScrollView。只有UIScrollView可以上下移动,其子类有UITableView,UICollectionView等等。

然后在建立self.view的位置执行第一段代码,监听键盘的动作,并执行相应的对策。

#第一段代码

// Call this method somewhere in your view controller setup code.

- (void)registerForKeyboardNotifications {

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWasShown:)
                                             name:UIKeyboardDidShowNotification
                                           object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWillBeHidden:)
                                             name:UIKeyboardWillHideNotification
                                           object:nil];

}

#第二段代码

// Called when the UIKeyboardDidShowNotification is sent.

- (void)keyboardWasShown:(NSNotification*)aNotification {
/*
//苹果官方代码 
 NSDictionary* info = [aNotification userInfo];
 CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
 UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
 self.scrollView.contentInset = contentInsets;
 self.scrollView.scrollIndicatorInsets = contentInsets;
// If active text field is hidden by keyboard, scroll it so it's visible
// Your app might not need or want this behavior.
 CGRect aRect = self.view.frame;
 aRect.size.height -= kbSize.height;
 if (!CGRectContainsPoint(aRect, activeField.frame.origin) ) {
           [self.scrollView scrollRectToVisible:activeField.frame animated:YES];
 }
*/

//StackOverFlow代码 
 NSDictionary* info = [aNotification userInfo];
 CGRect keyPadFrame=[[UIApplication sharedApplication].keyWindow convertRect:[[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue] fromView:self.view];
 CGSize kbSize =keyPadFrame.size;
 CGRect activeRect=[self.view convertRect:self.urlTextField.frame fromView:self.urlTextField.superview];
 CGRect aRect = self.view.bounds;
 aRect.size.height -= (kbSize.height);
 CGPoint origin = activeRect.origin;
 origin.y -= self.scrollView.contentOffset.y;

 if (!CGRectContainsPoint(aRect, origin)) {
            CGPoint scrollPoint = CGPointMake(0.0,CGRectGetMaxY(activeRect)-(aRect.size.height));
            [self.scrollView setContentOffset:scrollPoint animated:YES];
  }

}

#第三段代码

// Called when the UIKeyboardWillHideNotification is sent

 - (void)keyboardWillBeHidden:(NSNotification*)aNotification {

 /* 原代码没用,只是修改页边距,没有执行
 UIEdgeInsets contentInsets = UIEdgeInsetsZero;
 self.scrollView.contentInset = contentInsets;
 self.scrollView.scrollIndicatorInsets = contentInsets;
 */
 //我的方案
 [self.scrollView setContentOffset:CGPointMake(0, 0) animated:YES];

}

5.进度条的加载
WkWebview原生提供了API estimatedProgress可以输出当前的加载进度,但是直接执行setProgress: animated:方法是没有用的。

Stackoverflow给出了解决方案
http://stackoverflow.com/q/26198334/5243422

首先给self.webView添加观察事件。

[self.webView addObserver:self forKeyPath:@"estimatedProgress"
                                  options:NSKeyValueObservingOptionNew
                                  context:NULL];

然后执行下列方法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {

  if ([keyPath isEqualToString:@"estimatedProgress"] && object == self.webView) {
       [self.loadingProgress setAlpha:1.0f];
       [self.loadingProgress setProgress:self.webView.estimatedProgress animated:YES];
       if(self.webView.estimatedProgress >= 1.0f) {
                  [UIView animateWithDuration:0.3 
                                        delay:0.3
                                     options:UIViewAnimationOptionCurveEaseOut
                                   animations:^ {
                         [self.loadingProgress setAlpha:0.0f];
                         }
                                   completion:^(BOOL finished) {
                         [self.loadingProgress setProgress:0.0f animated:NO];
                         }
                  ];
      }
 }else {
       [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
 }

}

这一段是内存管理

- (void)dealloc {

 [self.webView removeObserver:self forKeyPath:@"estimatedProgress"];
 // if you have set either WKWebView delegate also set these to nil here
 [self.webView setNavigationDelegate:nil];
 [self.webView setUIDelegate:nil];

}

6、如何改变PickerView中的文字颜色

UIPickerView中不能直接设置文字格式,只能使用属性字符串。

- (NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component{

  NSAttributedString *attString = [[NSAttributedString alloc] initWithString:self.searchEnginesList[row] attributes:@{NSForegroundColorAttributeName:[UIColor whiteColor]}];
  return attString;

}

相关文章

  • 今日要事

    1.晚上青椒助教召开阶段性总结腾讯会议,主要分学科组,县区组与综合组总结了近期阶段性问题。我们学科组静琦老师主讲了...

  • 阶段性序

    阶段性目标:Leetcode 300道、体脂17% or 体重92斤阶段性安排:维持边做题边输出总结的节奏,并且始...

  • 阶段性总结

    这是一篇和技术无关但有关的短文,谨以记录在特扬的五个月时光。 还记得11月那会儿,还是个毛不会的萌新,准确的说是只...

  • 阶段性总结

    走了这么久,我还在用我现有的眼光看待别人,用我的世界折射别人的世界。最近看到朋友圈里新朋友们的动态,不是以往的感受...

  • 阶段性总结

    一、尽调和高新认定。 总部尽调,6月5日到6月12日。而我这边涉及四家公司、三年多的数据和各种材料。分工困难、取数...

  • 阶段性总结

    这一年年真是越过越快 去年的愿望一个也没实现 不过 考出陪伴了我十多年的成都 收拾屋子 学着做菜 拿到驾照 开了段...

  • 阶段性总结

    还有不到一周的时间就要开始在Kreab开工。现在有种强烈的一个时代的结束。回头这几年,其实我是成长很快的(相对于自...

  • 阶段性总结

    写了几天的代码,感觉确实有不少提升。目前基本的UI界面已经搭建的差不多了,但更高级的功能,比如收藏夹,夜间模式,页...

  • 阶段性总结

    习惯方面 有些习惯是一旦做了就会立刻产生作用,而且这个习惯并不需要很长的时间,消耗很多的精力,这些习惯不是一个过程...

  • 阶段性总结

    掐指一算,写作课已然来到最后一天(还好手指加脚趾一共有二十个)。 从开始参加的那一天,我就知道自己没什么时间和精力...

网友评论

      本文标题:阶段性总结

      本文链接:https://www.haomeiwen.com/subject/iqrycttx.html