IOS ScrollView滚动控件使用

1.ScrollView概述:

ScrollView是UIScrollView类,是容器类型的视图。

它有两个子类: UITextView和UITableView,它们在内容超出屏幕时提供水平或垂直滚动条。


2.其包含3个属性:

contentSize:表示SCrollView中的内容视图

contentInset:用于在ScrollView中的内容视图周边添加边框,这往往为了留出空白以放置工具栏、标签或导航栏等

contentOffset:内容视图坐标原点与ScrollVIew坐标原点的偏移量。


下面我们以一个实例来进行对ScrollView的初步学习:


主要完成:基本视图构造、点击文本框出现键盘之后,让文本框自动滚动到键盘之上、点击键盘上return button后关闭键盘。

技术分享

·以上为实现图,下面进行过程分析。


(1)构造基本视图:包括三个按钮以及一个文本框(其中一个按钮超出视图屏幕范围,需要下滑才能看到)

注意ScrollView中的全部控件都要调成绝对定位,与上边框的距离为绝对距离。这样他们的y坐标才不会因为之后调节了父视图(ScrollView)的高度后发生变化。

(2)为ScrollView与TextField控件添加输出口

@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property (weak, nonatomic) IBOutlet UITextField *textField;

(3)在ViewController.m中加入以下代码:

@implementation ViewController{
    BOOL keyboardVisible;
}
声明变量: 键盘打开标识


- (void)viewDidLoad {
    [super viewDidLoad];
    self.scrollView.contentSize = CGSizeMake(320,700);
    self.textField.delegate = self;  //实现了UITextFieldDelegate协议,这里把委托设置为自身。

}
这个是视图加载时自动触发的一个函数:设置了ScrollView得大小,以及设置了委托


//Asks the delegate if the text field should process the pressing of the return button.
//说明,当按下return button按钮时,隐藏键盘
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];  
    return YES;
}
在按下键盘上return button按钮时触发的一个函数,实现关闭按钮操作

-(void) keyboardDidShow:(NSNotification *)notif{
    if(keyboardVisible){
        return ;
    }

    //获得键盘尺寸
    NSDictionary * info = [notif userInfo];
    NSValue *avalue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
    CGSize keyboardSize = [avalue CGRectValue].size;

    //重新定义ScrollView的尺寸
    CGRect viewFrame = self.scrollView.frame;
    viewFrame.size.height -= (keyboardSize.height);
    self.scrollView.frame = viewFrame;

    //滚动到当前文本框
    CGRect textFieldRect = [self.textField frame];
    [self.scrollView scrollRectToVisible:textFieldRect animated:YES];
    keyboardVisible = YES;

}

-(void) keyboardDidHide: (NSNotification *)notif {

    NSDictionary* info = [notif userInfo];
    NSValue* aValue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
    CGSize keyboardSize = [aValue CGRectValue].size;

    CGRect viewFrame = self.scrollView.frame;
    viewFrame.size.height += keyboardSize.height;
    self.scrollView.frame = viewFrame;

    if (!keyboardVisible) {
        return;
    }

    keyboardVisible = NO;
    
}
第一个函数:当键盘出现时,获取键盘尺寸,重新定义ScrollView的尺寸,并且滚动到当前文本框

第二个函数:恢复尺寸


当然,这里对于以上两个定义的函数,目前还没有任何作用,因为没人调用它,它也不会被触发(是自己定义的函数)

下面在视图WillAppear与viewWillDisappear时调用这两个函数,以实现相应的功能:

//视图方法
-(void) viewWillAppear:(BOOL)animated {

    //注册键盘出现通知
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (keyboardDidShow:)
                                                 name: UIKeyboardDidShowNotification object:nil];
    //注册键盘隐藏通知
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (keyboardDidHide:)
                                                 name: UIKeyboardDidHideNotification object:nil];
    [super viewWillAppear:animated];
}


-(void) viewWillDisappear:(BOOL)animated {
    //解除键盘出现通知
    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name: UIKeyboardDidShowNotification object:nil];
    //解除键盘隐藏通知
    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name: UIKeyboardDidHideNotification object:nil];

    [super viewWillDisappear:animated];
}

同时注意,这里还需要注册键盘出现隐藏的通知(以及接触)

注册之后,当发生相应行为(这里指键盘出现与隐藏)时,就会去调用你实现的函数


至此,对于次ScrollView的使用完成。



对于IOS程序,其中的协议代理、自动触发函数、自定义函数,在一开始理解时比较混乱,不知道什么函数在什么时间被调用,如何设置等,在学习了这个程序之后希望跟我有一样问题的初学者可以稍微明白点。。。








郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。