0
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    #define kOFFSET_FOR_KEYBOARD 110.0
    textField.frame.origin.y -= kOFFSET_FOR_KEYBOARD;
    textField.frame.size.height += kOFFSET_FOR_KEYBOARD;
    textField.frame = CGRectMake(textField.frame.origin.x, (textField.frame.origin.y - 230.0), textField.frame.size.width, textField.frame.size.height);

}

在 iOS 中为我​​的 textField 应用程序获取了此代码...我计划以这样的方式使用它,当键盘出现时,文本字段就在键盘顶部上升,当按下键盘上的返回键时,文本字段回到屏幕底部的原始位置。但我收到此错误,“表达式不可分配。” 我该如何解决这个问题?错误是什么意思?

4

2 回答 2

0

您不能为原点或高度分配值。您必须将 CGRect 分配给您的框架并更新新 CGRect 中的值。

于 2013-07-31T14:27:22.150 回答
0

您不能像这样编辑框架:

textField.frame.origin.y -= kOFFSET_FOR_KEYBOARD;
textField.frame.size.height += kOFFSET_FOR_KEYBOARD;

您需要获取框架,对其进行编辑,然后再次将其分配回来,如下所示:

CGRect myFrame = textField.frame;
myFrame.origin.y -= kOFFSET_FOR_KEYBOARD;
myFrame.size.height += kOFFSET_FOR_KEYBOARD;
textField.frame = myFrame;

如果您发现自己必须经常这样做,您可以编写一个类别来实现这些方法(setHeight、setX...),例如:

#import <UIKit/UIKit.h>

@interface UIView (AlterFrame)

- (void) setFrameWidth:(CGFloat)newWidth;
- (void) setFrameHeight:(CGFloat)newHeight;
- (void) setFrameOriginX:(CGFloat)newX;
- (void) setFrameOriginY:(CGFloat)newY;

@end



#import "UIView+AlterFrame.h"

@implementation UIView (AlterFrame)

    - (void) setFrameWidth:(CGFloat)newWidth {
        CGRect f = self.frame;
        f.size.width = newWidth;
        self.frame = f;
    }

    - (void) setFrameHeight:(CGFloat)newHeight {
        CGRect f = self.frame;
        f.size.height = newHeight;
        self.frame = f;
    }

    - (void) setFrameOriginX:(CGFloat)newX {
        CGRect f = self.frame;
        f.origin.x = newX;
        self.frame = f;
    }

    - (void) setFrameOriginY:(CGFloat)newY {
        CGRect f = self.frame;
        f.origin.y = newY;
        self.frame = f;
    }

@end

取自第二个响应:

改变 CGRect (或任何结构)?

于 2013-07-31T14:27:43.770 回答