Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >带有TextFields的iPhone TableView -下一步、上一步按钮问题

带有TextFields的iPhone TableView -下一步、上一步按钮问题
EN

Stack Overflow用户
提问于 2013-02-25 09:29:56
回答 2查看 1K关注 0票数 1

我有一个表格视图,其中包含大量用于创建表单的单元格。我已经创建了一个自定义的TableViewCell。此单元格包含一个标签和一个文本字段,因此,例如,每行将如下所示

我也有一个自定义的表格单元,其中包含一个标签和一个文本视图,看起来与上面的图像相同,只是单元格更大,以便为文本视图留出空间。

现在,这些文本字段和文本视图中的每一个都添加了工具栏,因此当文本字段成为first responder时,将显示一个工具栏,其中包含按钮、完成、上一步和下一步按钮。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  UIBarButtonItem *doneButton = [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(doneWithTextField:)];

        UIBarButtonItem *nextButton = [[UIBarButtonItem alloc]initWithTitle:@"Next" style:UIBarButtonItemStyleDone target:self action:@selector(nextTableTextField:)];

        UIBarButtonItem *previousButton = [[UIBarButtonItem alloc]initWithTitle:@"Previous" style:UIBarButtonItemStyleDone target:self action:@selector(previousTableTextField:)];


        UIToolbar *numberToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];
        numberToolbar.barStyle = UIBarStyleBlackTranslucent;
        numberToolbar.items = [NSArray arrayWithObjects:
                               previousButton,
                               nextButton,
                               [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
                               doneButton,
                               nil];

        [numberToolbar sizeToFit];

        field.inputAccessoryView = numberToolbar;

我遇到的问题是,假设我有10个这样的表行,屏幕只能显示大约5个整行和第6行的一小部分。我应该补充说,我还向文本字段委托添加了代码,以便当文本字段成为第一响应者时,屏幕滚动以允许文本字段完全显示。有关代码,请参阅我以前的帖子here

因此,当屏幕加载时,我按下第一个单元格,然后单击下一步,工作正常,移动到下一个单元格中的第二个文本字段。然后我再次点击next按钮,它转到第三个单元格,然后是第四个,然后是第五个。现在,问题就出现了。当我在第5个单元格中,单击下一步时,第6个文本域成为第一个响应者,但由于某种原因,屏幕无法滚动。现在更大的问题是,当我再次单击next时,它没有移动到第7个文本字段,因为第7个单元格还没有在内存中,因为它在屏幕上不可见。因此,如果我点击下一步,它将不会做任何事情,文本字段6将仍然是第一个响应者。因此,我需要先向下滚动一点,这样单元格7才可见,然后next按钮才会起作用,并使next文本字段成为第一响应者。

当点击上一个按钮时也会出现同样的问题,如果点击了上一个按钮,而上一个单元格不在屏幕上,那么它将不会做任何事情,直到那个单元格在屏幕上可见。

这让我很头疼,因为我似乎想不出解决这个问题的办法。还有其他人遇到过类似的问题吗?有没有好的办法来解决这个问题?

提前感谢

编辑:

我还应该加上这一点,这使得保存数据成为一个问题,因为假设我有一个按钮,当单击该按钮时,它将循环遍历每个表格单元格并保存每个字段中的数据,它将只循环遍历屏幕上可见的表格单元格,而忽略其余的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-25 10:32:48

这对我来说很有效,我使用的是当按下键盘上的“完成”按钮将焦点移到下一个文本字段单元格时触发的块:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FRTextFieldTableViewCell *textFieldCell = [tableView_ dequeueReusableCellWithIdentifier:[FRTextFieldTableViewCell reuseIdentifier]];
        if(textFieldCell == nil) {
            textFieldCell = [[FRTextFieldTableViewCell alloc] initWithStyle:
                             UITableViewCellStyleDefault reuseIdentifier:[FRTextFieldTableViewCell reuseIdentifier]];
        }

        [textFieldCell.textField initialize];
        textFieldCell.textField.secureTextEntry = (indexPath.row == 3);

        __weak FRSignUpViewController *self_ = self;
        __weak FRTextFieldTableViewCell *textFieldCell_ = textFieldCell;
        if(indexPath.row == 1) {
            textFieldCell.textField.placeholder = NSLocalizedString(@"name", @"");
            textFieldCell.object = self.regUser.name;
            textFieldCell.didChangedValueAction = ^(NSString *object) {
                [self_ setName:object];
            };
            textFieldCell.didEndOnExitAction = ^{
                [self_ setName:textFieldCell_.object];
                FRTextFieldTableViewCell *nextCell = (FRTextFieldTableViewCell *)[self_.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:2 inSection:0]];
                [nextCell.textField becomeFirstResponder];
            };
        }
        if(indexPath.row == 2) {
            textFieldCell.textField.placeholder = NSLocalizedString(@"email", @"");
            textFieldCell.didChangedValueAction = ^(NSString *object) {
                [self_ setLoginString:object];
            };
            textFieldCell.didEndOnExitAction = ^{
                [self_ setLoginString:textFieldCell_.object];
                FRTextFieldTableViewCell *nextCell = (FRTextFieldTableViewCell *)[self_.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:3 inSection:0]];
                [nextCell.textField becomeFirstResponder];
            };
        }
        if(indexPath.row == 3) {
            textFieldCell.textField.placeholder = NSLocalizedString(@"password", @"");
            textFieldCell.didChangedValueAction = ^(NSString *object) {
                [self_ setPasswordString:object];
            };
            textFieldCell.didEndOnExitAction = ^{
                [self_ setPasswordString:textFieldCell_.object];
                [self_ signUp];
            };
        }
        [textFieldCell reloadData];
        return textFieldCell;

BlocksTypedefs:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* type defenition for blocks, can be used by any app class */
typedef void (^CompletionBlock)(id, NSError *);
typedef void (^SimpleBlock)(void);
typedef void (^InfoBlock)(id);
typedef void (^ConfirmationBlock)(BOOL);

TableViewCell代码:

.h文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#import "FRTableViewCell.h"
#import "BlocksTypedefs.h"
#import "FRTextFieldWithPadding.h"

@interface FRTextFieldTableViewCell : FRTableViewCell <UITextFieldDelegate>

@property (nonatomic, copy) SimpleBlock didEndOnExitAction;
@property (nonatomic, copy) SimpleBlock didEndEditingAction;
@property (nonatomic, copy) InfoBlock didChangedValueAction;
@property (nonatomic, strong) IBOutlet FRTextFieldWithPadding *textField;

@end

.m:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    #import "FRTextFieldTableViewCell.h"

@implementation FRTextFieldTableViewCell

- (void)awakeFromNib {
    [super awakeFromNib];
    self.backgroundColor = [UIColor clearColor];
}

- (void)reloadData {
    self.textField.text = self.object;
}

- (IBAction)textFieldValueDidChanged:(UITextField *)sender {
    self.object = sender.text;
    if (self.didChangedValueAction) {
        self.didChangedValueAction(self.object);
    }
}

- (IBAction)textFieldDidEndOnExit:(UITextField *)sender {
    self.object = sender.text;
    if (self.didEndOnExitAction) {
        self.didEndOnExitAction();
    }
}

#pragma mark - UITextFieldDelegate

- (void)textFieldDidEndEditing:(UITextField *)textField {
    self.object = textField.text;
    if (self.didEndEditingAction) {
        self.didEndEditingAction();
    }
}

@end
票数 1
EN

Stack Overflow用户

发布于 2013-02-25 10:02:34

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CGRect frame = CGRectMake(0.0, self.view.bounds.size.height, self.view.bounds.size.width, 44.0);
fieldAccessoryView = [[UIToolbar alloc] initWithFrame:frame];
fieldAccessoryView.barStyle = UIBarStyleBlackOpaque;
fieldAccessoryView.tag = 200;

[fieldAccessoryView setBarStyle:UIBarStyleBlack];

UIBarButtonItem *spaceButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone  target:self action:@selector(done:)];

UISegmentedControl* segmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:NSLocalizedString(@"Previous", @""), NSLocalizedString(@"Next", @""), nil]];
[segmentedControl addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];
segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
[segmentedControl setMomentary:YES];
UIBarButtonItem *segmentButton = [[UIBarButtonItem alloc] initWithCustomView:segmentedControl];

[fieldAccessoryView setItems:[NSArray arrayWithObjects:segmentButton, spaceButton, doneButton, nil] animated:NO];
[segmentButton release];
[spaceButton release];
[doneButton release];
[segmentedControl release];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15063798

复制
相关文章
ios tableview 上加 textfiled
ios tableview 上加 textfiled  首先附上我项目中用曾经用到的几张图  并说明一下我的用法: 图1: 图2: 图3: 心在你我说一下  我当初的实现 方法 ,希望能给你们一些  
用户1219438
2018/02/01
9720
ios tableview 上加 textfiled
AlphaGo 的下一步计划
今日 DeepMind 的 AlphaGo 3:0 柯洁。整个未来围棋峰会结束。DeepMind 宣告的下一步的计划。 仅仅看到的棋盘上的三个子,我们就明白这不是一场寻常的比赛。 中国围棋大师,世界
用户1107453
2018/06/21
4430
京东物流下一步
3月10日,京东物流发布了其上市后的首份年度业绩报告。报告显示,2021年京东物流总收入达1047亿元,同比增长42.7%,其中外部客户收入达591亿元,同比增长72.7%,占总收入比重的56.5%。伴随着其外部业务量、技术和精细化管理能力的不断提升,规模经济效应得到释放,盈利水平也得到了改善。
金融外参
2022/05/11
5400
黄海下一步要完成的工作
_json[“flag_id”] = flag_id _json[“resource_title”] = res[1][“resource_title”] _json[“file_name”] = res[1][“file_name”]
全栈程序员站长
2022/06/29
2350
万物联网的下一步
作者:杜志挺 近年来,有许多国家开始大力推广物联网(Internet of Things, IoT),物联网的发展会比RFID更为精彩.RFID提供对象一个独一的辨识码,借助这个辨识码,我们可以区别一个对象和另一个对象的不同,是在个别对象的层次而不是商品的层次。 例如,两包威化饼(相同商品)有相同的条形码(barcode),但贴上不同RFID后,我们可以区别出第一包威化饼和第二包不同,这带来许多好处,包括可以大幅提高自动化效率。想象一下,进超市买东西用自家菜篮,买了些生果丶杂货,然后直接走出付费处,系
企鹅号小编
2018/02/01
5960
万物联网的下一步
【IOS开发基础系列】UIAlertController专题
http://www.cocoachina.com/ios/20141126/10320.html
江中散人_Jun
2023/10/16
6130
【IOS开发基础系列】UIAlertController专题
深度学习下一步如何发展?
来源:https://www.zhihu.com/question/47602063/answer/150845355
CreateAMind
2018/07/24
6150
深度学习下一步如何发展?
【翻译】下一步:Go 泛型
自从我们上次写下关于在Go中加入泛型的可能性的文章以来,已经快一年了。现在是该更新的时候了。
Regan Yue
2023/03/30
2480
GPT-4下一步?
这次GPT-4发布可谓万众瞩目,最重要的升级就是多模态,也就是不止支持文本,还支持图片了。
木羊
2023/09/09
2860
项目更新:OpenStack Neutron的下一步是什么
在最近的温哥华峰会上,OpenStack项目团队负责人(PTL)和其核心团队成员介绍了OpenStack项目的相关更新,以及如何参与并影响路线图。
SDNLAB
2018/07/30
4450
项目更新:OpenStack Neutron的下一步是什么
SaaS已死,软件的下一步是什么?
在上个世纪的前半个世纪中,大量的电气化设备取代了传统的人工设备并为人们创造出了大量的财富。 在当时,因为电气化是一种全新的词语,所以在人们描述这些新颖的小工具时,限定术语“电动”是一个重要的区别。 然而,随着人们生活中的每一个设备均应用了电气化技术,“电动”这个形容词最终被抛弃了。而这种变化似乎也将发生在软件领域中。 如今,SaaS(Software as a Service)这一词语的逐渐没落,而人们也开始将眼光回归到“软件”上面。一个典型的案例,就是Salesforce将对于它“没有软件”的口号也解释为
人称T客
2018/06/06
6640
配置SDK Manager,迎接下一步
SDK Manager.exe 是ADT Bundle根目录下的一个SDK 管理程序,该程序主要负责下载、更新、删除与sdk 相关的文件。 由于谷歌目前不推荐使用Eclipse,已经停止了对ADT的更新,所以ADT Bundle集合包里的Android版本只有4.4W,不是最新的Android版本,那就需要我们手动更新一下Android版本,当然必不可少的就是需要使用到我们的SDK Manager。 一、SDK Manager入口 进入ADT Bundle工具包的解压包下面的adt-
分享达人秀
2018/02/02
1.5K0
配置SDK Manager,迎接下一步
学习世界模型,通向AI的下一步:Yann LeCun在IJCAI 2018上的演讲
Yann LeCun 开场介绍说,当前几乎所有的机器学习从业者在实践中使用的都是监督式学习:向机器展示大量的样本,然后告诉机器正确的答案与内部参数,然后就能做图像识别之类的任务。而过去几年,监督式学习有了极大的成功,应用也非常广泛。下图对比了传统机器学习与深度学习各自的特点。
机器之心
2018/07/26
4580
学习世界模型,通向AI的下一步:Yann LeCun在IJCAI 2018上的演讲
GWAS做完了,下一步做什么?
通过GWAS分析可以找出与疾病相关联的SNP位点,然而我们的根本目的是找出可能导致疾病发生的SNP位点,这些位点位于GWAS分析结果中,完成了GWAS分析之后,我们还需要借助下游分析对GWAS的分析结果进一步注释和挖掘,筛选可能致病的SNP位点。
生信修炼手册
2019/12/19
6.3K0
GWAS做完了,下一步做什么?
python 协程 下一步执行 常用
import asyncio import time from random import randint
用户5760343
2022/01/09
2130
idea设置快捷键为eclipse_idea设置上一步下一步快捷键
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/08
3790
idea设置快捷键为eclipse_idea设置上一步下一步快捷键
技术解码 | 版权保护的下一步——数字水印
数字水印作为一种新兴的技术方案,在版权保护和溯源中具有广阔的应用前景。本周的技术解码就由狄冲老师为大家解密图像和视频数字水印的相关内容
腾讯云音视频
2020/07/17
5.6K0
技术解码 | 版权保护的下一步——数字水印
马云火烧南极的下一步是 游戏?!
昨日,中国最大IT社区CSDN总编刘江在其认证微博透露,马云在一个小型沟通会称将“大力”进军游戏,与腾讯直接竞争。马云和马化腾私交甚好,还联合马明哲三马齐推众安在线保险公司,或许是怕马化腾接受不了自己的变化,马云还说“这种竞争不是像美国巨头那样你死我活,而是充满乐趣”。 没错,是“大力”。马云和阿里副总裁王帅均表示过,阿里不投资或者不做网络游戏。去年6月淘宝推出游戏联运平台小试牛刀,现在则要大力进军。马云最近一反常态,多次讲话均弥漫着前所未有的杀气,大有与腾讯对决的势头。进军游戏,意味着阿
罗超频道
2018/04/27
7850
点击加载更多

相似问题

遍历tableview的iOS下一步/上一步按钮

13

iPhone MPMoviePlayerController上的下一步/上一步按钮

31

iPhone键盘下一步按钮

12

Iphone Uitoolbar下一步按钮

10

带有下一步和上一步按钮的面板

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文