Iphone 我怎样才能摆脱“我的”呢;“鬼魂”;以编程方式清除字段后显示在UITextField中的文本?
我对UITextField有一个奇怪的问题-我正在将它的值设置为@“”(或其他任何仍然导致它的原因),然后将字段收缩为零。下次我取消收缩它时,它将显示收缩它之前的相同值,而不管我是否更改了视图中的文本。在字段中键入会导致故障消失,但看起来很糟糕 要复制的完整代码: 一次性_testViewController.h:Iphone 我怎样才能摆脱“我的”呢;“鬼魂”;以编程方式清除字段后显示在UITextField中的文本?,iphone,uikit,uitextfield,uiviewanimation,Iphone,Uikit,Uitextfield,Uiviewanimation,我对UITextField有一个奇怪的问题-我正在将它的值设置为@“”(或其他任何仍然导致它的原因),然后将字段收缩为零。下次我取消收缩它时,它将显示收缩它之前的相同值,而不管我是否更改了视图中的文本。在字段中键入会导致故障消失,但看起来很糟糕 要复制的完整代码: 一次性_testViewController.h: #import <UIKit/UIKit.h> @interface throwaway_testViewController : UIViewController
#import <UIKit/UIKit.h>
@interface throwaway_testViewController : UIViewController <UITextFieldDelegate>{
UITextField * unitField;
}
@property (nonatomic, assign) IBOutlet UITextField * unitField;
-(IBAction)setEditingSectionUnits;
-(void)setEditingSectionValue;
-(IBAction)equalsPress;
@end
在xib
中,将UITextField
绑定到unitField
,并将文本字段的委托设置为文件的所有者
放置一个标有equals的ui按钮
按下
并将其绑定到该i操作
,另一个名为edit的按钮,绑定到setEditingSectionUnits
。要查看重现的错误,请执行以下操作:
- 运行应用程序
- 按编辑
- 在文本字段中键入内容(最少8-10个字符)
- 按键盘上的enter键
- 压力机等压力机
- 按编辑
- 应该看到:光标和空文本字段
- 请看:最后键入的内容,开头有一个光标
- 键入会使此文本消失
- (void)viewDidLoad
{
[super viewDidLoad];
[self.unitField setText:@"Testing"];
}
- (IBAction)hideButtonTapped:(id)sender
{
[UIView animateWithDuration:0.5 animations:^(void)
{
[self.unitField setText:@""];
self.unitField.frame = CGRectMake(10, 10, 0, 30);
}
];
}
- (IBAction)showButtonTapped:(id)sender
{
[UIView animateWithDuration:0.5 animations:^(void)
{
self.unitField.frame = CGRectMake(10, 10, 100, 30);
}
];
}
也许您可以提供更多的代码,因为我觉得您可能遗漏了一些重要的内容,或者您可以指出您的实现与上面的不同之处。我快速查看了一下,但您是否可以尝试保留UITextField:
@property (nonatomic, retain) IBOutlet UITextField * unitField;
也可以使用EqualPress
-(IBAction)equalsPress{
[unitField setText:@""];
[UIView animateWithDuration:0.5 animations:^(void){
[self setEditingSectionValue];
}];
}
我想出了一个解决你问题的办法,虽然不太好,但至少它是有效的
-(IBAction)equalsPress{
tmp = nil;
//same code as yours
}
-(void)setEditingSectionUnits{
if (tmp != nil) {
unitField.text = tmp;
}
//same code as yours
}
-(void)setEditingSectionValue{
if ([unitField.text length] > 9) {
tmp = unitField.text;
unitField.text = [unitField.text substringToIndex:9];
[tmp retain];
}else {
tmp = nil;
}
//same code as yours
}
我在头文件中声明了tmp:
NSString *tmp;
复制代码后,我发现您提到的问题只有在按键盘上的return键,然后点击equals press按钮时才会出现。。。 在调用
setEditingSectionValue
方法中的动画块之前重新调整第一响应程序,解决了以下问题:
-(void)setEditingSectionValue{
[unitField resignFirstResponder];
[UIView animateWithDuration:0.5 animations:^(void){
CGRect newRect = unitField.frame;
newRect.size.width = [unitField.text sizeWithFont:unitField.font constrainedToSize:CGSizeMake(80, 500)].width;;
unitField.frame = newRect;
}completion:^(BOOL completed){
completed ? [unitField setNeedsDisplay] : nil;
}];
}
与其将宽度设置为0,您是否尝试过简单地执行unitField.hidden=YES?作为一种解决方法,您是否尝试过在动画恢复到完整大小后调用
[unitField setNeedsDisplay]
?@sosborn不幸的是,我的UI要求它收缩到零,这让用户体验到知道它去了哪里,从而知道如何将其刷回@谜题我会试试,你认为动画结束后我需要调用它吗?真奇怪,我甚至无法通过在完成函数中调用setText来更新它。你确定正在调用完成函数吗?这是一个很好的观察结果,我正在剥离代码,直到得到导致错误的最小值。我会发布我的发现。我尝试了equalsPress更改,它不会影响结果。保留UITextField有什么好处?它似乎与设置为左对齐的文本一起工作,我在调整它以适应居中文本字段方面遇到困难,但我找到了部分解决方法,如果我将文本设置为@“”,然后返回到完成块中的上一个值,它仍然会出现故障,但是在动画结束后,这个小故障就消失了…我会尝试一下,如果是这样的话,你已经让我开心了,我会回来奖励奖金的。谢谢!你是怎么缩小范围的?
-(void)setEditingSectionValue{
[unitField resignFirstResponder];
[UIView animateWithDuration:0.5 animations:^(void){
CGRect newRect = unitField.frame;
newRect.size.width = [unitField.text sizeWithFont:unitField.font constrainedToSize:CGSizeMake(80, 500)].width;;
unitField.frame = newRect;
}completion:^(BOOL completed){
completed ? [unitField setNeedsDisplay] : nil;
}];
}