IOS Implementation Click Status bar automatically back to the top effect of the detailed _ios

Source: Internet
Author: User

Objective

We all know that the implementation of the status bar (StatusBar) automatically return to the top effect, designed to facilitate the user browsing the interface, click the status bar can quickly return to the top of the interface, so mainly for the can scroll UIScrollView and its subclasses UITableVIew and UICollectionView .

This feature is implemented in the following ways.

1. Apple with its own function

Analysis:

First of all, Apple itself has provided this feature, slide up tabView , click statusBar , tableView will automatically return to the original position. As shown in the following figure, click here statusBar and the top of the screen will display the first one cell . Add one to a controller tabView , then the default click statusBar is automatically returned to the top.


Since Apple has already provided this function, we can use it directly, why do we have to implement it ourselves?

In fact, in some cases this function is not valid. For example, when there are two or two or more subclasses on a window UIScrollView . For example, add the above tabView to one first scrollView , then add it to the scrollView controller, and then View click statusBar , Tabview not automatically back to the top.

Because the effect is valid, it is scrollsToTop related to the attribute. To view the official documentation, the following points are noteworthy:

1. By default, scrollsToTop Yes, and only if the property is yes, the click is statusBar valid.

2. The effect is to allow statusBar the nearest ScrollView automatic back to the top of the

3. At the top of the iphone screen, when there are multiple ScrollView (or its subclasses), if scrollsToTop= YES ScrollView more than one, all ScrollView will not respond statusBar to the click.

Summary:

From the above analysis we can draw the conclusion that we must ensure that scrollsToTop == YES the window ScrollView (and its subclasses) at the same time there is only one. This is the same as to ensure that the click StatusBar, the only existing ScrollView can automatically return to the top.

How to ensure that the Apple itself with the function has been working?

Solution: We want to go back to the top of the ScrollView scrollsToTop =YES other scrollsToTop = NO .

Sometimes, in order to meet a certain demand, we scrollView will add more than one above TabView , to achieve sliding up and down cell the display of different content, sliding left and right can switch different tabView , then click statusBar is no effect. Because of all scrollView the scrollsToTop =YES . To display each TableView time, the clicks statusBar are valid and must be made to show all but the top TabView ScrollView scrollsToTop =NO . This needs to be judged by which one is displayed TabView .

The reference code is as follows:

1. Let the bottom of the scrollView , scrollsToTop =NO . The other TableView is the scrollView subclass of the class.

2. Traverse judgment

 Control ScrollView Scrollstotop Property for
 (Nsinteger i = 0; i < Self.childViewControllers.count; i++) {
  Uiviewcontroller *CHILDVC = self.childviewcontrollers[i];

  If the controller's view is not created, skip if
  (!childvc.isviewloaded) continue;

  If the controller's view is not scrollview, it skips the
  if (![ Childvc.view Iskindofclass:[uiscrollview class]) continue;

  If the controller's view is ScrollView
  uiscrollview *scrollview = (Uiscrollview *) Childvc.view;
  Scrollview.scrollstotop = (i = = index);
 }

2. Realize your Own

statusBaradd a cover to the area and listen for a masked click event.

UIView

First we thought of using UIView it to cover. However, here we UIView are statusBar not able to use, UIView will always be in statusBar the following, so can not receive the Click event. Because statusBar it is actually one UIWindow , and the priority is higher than the following keyWindow . So, the added UIView will be statusBar underneath.


UIWindow

Because of the priority of the relationship, we can use one UIWindow to cover, set window the priority of the mask is higher statusBar . Of course, setting the highest priority ( UIWindowLevelAlert ) is certainly possible. Then Window add a click event to the mask, and the background color is set to transparent.


 Dispatch_after (Dispatch_time (Dispatch_time_now, int64_t) (0.1 * nsec_per_sec)), Dispatch_get_main_queue (),

  ^{ UIWindow * Coverwindow =[[uiwindow alloc]initwithframe:cgrectmake (0, 0, [UIScreen mainscreen].bounds.size.width, 20)];
  Self.coverwindow = Coverwindow;
  Coverwindow.hidden = NO;
  Coverwindow.backgroundcolor = [Uicolor redcolor];
  Coverwindow.windowlevel = Uiwindowlevelalert;
  Add gesture
  UITapGestureRecognizer *tap = [UITapGestureRecognizer alloc]initwithtarget:self action: @selector ( Coverwindowclick)];
  [Self.coverwindow Addgesturerecognizer:tap];
 
-(void) Coverwindowclick {
 [uiview animatewithduration:0.5 animations:^{

  self.tableView.contentOffset = Cgpointmake (0, 0);
 }];
}

Appdelegate Direct monitoring of statusbar clicks

AppDelegateImplementing Methods in touchesBegan:

-(void) Touchesbegan: (Nsset<uitouch *> *) touches withevent: (Uievent *) Event {
  if ([Touches.anyobject Locationinview:nil].y >) return;
 [[Nsnotificationcenter defaultcenter]postnotificationname:@ "click" Object:nil];

}

Receive notification, modify tabView thecontentOffset

-(void) Coverwindowclick {
 [uiview animatewithduration:0.5 animations:^{

  self.tableView.contentOffset = Cgpointmake (0, 0);
 }];
}

Summarize

The above is the entire content of this article, I hope that the development of iOS can help you, if you have any questions you can exchange messages, thank you for your support cloud habitat community.

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.