Iphone 我怎样才能摆脱“我的”呢;“鬼魂”;以编程方式清除字段后显示在UITextField中的文本?

Iphone 我怎样才能摆脱“我的”呢;“鬼魂”;以编程方式清除字段后显示在UITextField中的文本?,iphone,uikit,uitextfield,uiviewanimation,Iphone,Uikit,Uitextfield,Uiviewanimation,我对UITextField有一个奇怪的问题-我正在将它的值设置为@“”(或其他任何仍然导致它的原因),然后将字段收缩为零。下次我取消收缩它时,它将显示收缩它之前的相同值,而不管我是否更改了视图中的文本。在字段中键入会导致故障消失,但看起来很糟糕 要复制的完整代码: 一次性_testViewController.h: #import <UIKit/UIKit.h> @interface throwaway_testViewController : UIViewController

我对UITextField有一个奇怪的问题-我正在将它的值设置为@“”(或其他任何仍然导致它的原因),然后将字段收缩为零。下次我取消收缩它时,它将显示收缩它之前的相同值,而不管我是否更改了视图中的文本。在字段中键入会导致故障消失,但看起来很糟糕

要复制的完整代码:

一次性_testViewController.h:

#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;
    }];
}