为了账号安全,请及时绑定邮箱和手机立即绑定

选择文本字段时生成UITableView滚动框

选择文本字段时生成UITableView滚动框

iOS
交互式爱情 2019-07-22 14:38:46
选择文本字段时生成UITableView滚动框经过多次尝试和错误之后,我放弃了并问了这个问题。我见过很多人都有类似的问题,但无法找到正确的答案。我有一个UITableView由自定义单元格组成。单元格由相邻的5个文本字段组成(有点像网格)。当我试图滚动和编辑底部的单元格时,UITableView,我无法使我的细胞正确地定位在键盘上方。我见过很多关于改变视野大小等问题的答案.但到目前为止,他们中没有一个人工作得很好。有谁能用一个具体的代码示例来澄清做这件事的“正确”方法吗?
查看完整描述

3 回答

?
www说

TA贡献1775条经验 获得超8个赞

如果您使用UITableViewController而不是UIViewController,它将自动这样做。


查看完整回答
反对 回复 2019-07-22
?
当年话下

TA贡献1890条经验 获得超9个赞

进行滚动的功能可能要简单得多:

- (void) textFieldDidBeginEditing:(UITextField *)textField {
    UITableViewCell *cell;

    if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
    // Load resources for iOS 6.1 or earlier
        cell = (UITableViewCell *) textField.superview.superview;

    } else {
        // Load resources for iOS 7 or later
        cell = (UITableViewCell *) textField.superview.superview.superview; 
       // TextField -> UITableVieCellContentView -> (in iOS 7!)ScrollView -> Cell!
    }
    [tView scrollToRowAtIndexPath:[tView indexPathForCell:cell] atScrollPosition:UITableViewScrollPositionTop animated:YES];}

就这样。根本没有计算。


查看完整回答
反对 回复 2019-07-22
?
四季花海

TA贡献1811条经验 获得超5个赞

我正在做一些非常类似的事情-它是通用的,不需要为您的代码计算特定的东西。只需检查代码上的注释:

在MyUIViewController.h中

@interface MyUIViewController: UIViewController <UITableViewDelegate, UITableViewDataSource>{
     UITableView *myTableView;
     UITextField *actifText;}@property (nonatomic, retain) IBOutlet UITableView *myTableView;@property (nonatomic, retain) IBOutlet UITextField *actifText;- (IBAction)textFieldDidBeginEditing:(UITextField *)textField;- (IBAction)textFieldDidEndEditing:(UITextField *)textField;-(void) keyboardWillHide:(NSNotification *)note;-(void) keyboardWillShow:(NSNotification *)note;@end

在MyUIViewController.m中

@implementation MyUIViewController@synthesize myTableView;@synthesize actifText;- (void)viewDidLoad 
{
    // Register notification when the keyboard will be show
    [[NSNotificationCenter defaultCenter] addObserver:self
                                          selector:@selector(keyboardWillShow:)
                                          name:UIKeyboardWillShowNotification
                                          object:nil];

    // Register notification when the keyboard will be hide
    [[NSNotificationCenter defaultCenter] addObserver:self
                                          selector:@selector(keyboardWillHide:)
                                          name:UIKeyboardWillHideNotification
                                          object:nil];}// To be link with your TextField event "Editing Did Begin"//  memoryze the current TextField- (IBAction)textFieldDidBeginEditing:(UITextField *)textField{
    self.actifText = textField;}// To be link with your TextField event "Editing Did End"//  release current TextField- (IBAction)textFieldDidEndEditing:(UITextField *)textField{
    self.actifText = nil;}-(void) keyboardWillShow:(NSNotification *)note{
    // Get the keyboard size
    CGRect keyboardBounds;
    [[note.userInfo valueForKey:UIKeyboardFrameBeginUserInfoKey] getValue: &keyboardBounds];

    // Detect orientation
    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
    CGRect frame = self.myTableView.frame;

    // Start animation
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationDuration:0.3f];

    // Reduce size of the Table view 
    if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown)
        frame.size.height -= keyboardBounds.size.height;
    else 
        frame.size.height -= keyboardBounds.size.width;

    // Apply new size of table view
    self.myTableView.frame = frame;

    // Scroll the table view to see the TextField just above the keyboard
    if (self.actifText)
      {
        CGRect textFieldRect = [self.myTableView convertRect:self.actifText.bounds fromView:self.actifText];
        [self.myTableView scrollRectToVisible:textFieldRect animated:NO];
      }

    [UIView commitAnimations];}-(void) keyboardWillHide:(NSNotification *)note{
    // Get the keyboard size
    CGRect keyboardBounds;
    [[note.userInfo valueForKey:UIKeyboardFrameBeginUserInfoKey] getValue: &keyboardBounds];

    // Detect orientation
    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
    CGRect frame = self.myTableView.frame;

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationDuration:0.3f];

    // Increase size of the Table view 
    if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown)
        frame.size.height += keyboardBounds.size.height;
    else 
        frame.size.height += keyboardBounds.size.width;

    // Apply new size of table view
    self.myTableView.frame = frame;

    [UIView commitAnimations];}@end

SWIFT 1.2+版本:

class ViewController: UIViewController, UITextFieldDelegate {
    @IBOutlet weak var activeText: UITextField!
    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        NSNotificationCenter.defaultCenter().addObserver(self,
            selector: Selector("keyboardWillShow:"),
            name: UIKeyboardWillShowNotification,
            object: nil)
        NSNotificationCenter.defaultCenter().addObserver(self,
            selector: Selector("keyboardWillHide:"),
            name: UIKeyboardWillHideNotification,
            object: nil)
    }

    func textFieldDidBeginEditing(textField: UITextField) {
        activeText = textField    }

    func textFieldDidEndEditing(textField: UITextField) {
        activeText = nil
    }

    func keyboardWillShow(note: NSNotification) {
        if let keyboardSize = (note.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() {
            var frame = tableView.frame            UIView.beginAnimations(nil, context: nil)
            UIView.setAnimationBeginsFromCurrentState(true)
            UIView.setAnimationDuration(0.3)
            frame.size.height -= keyboardSize.height
            tableView.frame = frame            if activeText != nil {
                let rect = tableView.convertRect(activeText.bounds, fromView: activeText)
                tableView.scrollRectToVisible(rect, animated: false)
            }
            UIView.commitAnimations()
        }
    }

    func keyboardWillHide(note: NSNotification) {
        if let keyboardSize = (note.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() {
            var frame = tableView.frame            UIView.beginAnimations(nil, context: nil)
            UIView.setAnimationBeginsFromCurrentState(true)
            UIView.setAnimationDuration(0.3)
            frame.size.height += keyboardSize.height
            tableView.frame = frame            UIView.commitAnimations()
        }
    }}



查看完整回答
反对 回复 2019-07-22
  • 3 回答
  • 0 关注
  • 347 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信