object方法不喜欢传入CGRect

时间:2011-12-07 21:18:13

标签: iphone objective-c ios

创建了一个对象MyTextBoxCreator。我需要动态制作大量文本框。我希望能够将框架传递给方法。

.h file
-(UITextField *) standardTextField: (CGRect *) myRec;


.m file
-(UITextField *) standardTextField: (CGRect *) myRect
{
    UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 30)];

    UITextField *myTextField = [[UITextField alloc] initWithFrame:myRect];
    myTextField.font = [UIFont fontWithName:textFieldFont size:textFieldFontSize];
    myTextField.borderStyle = UITextBorderStyleLine;
    myTextField.backgroundColor = [UIColor whiteColor];
    myTextField.textColor = [UIColor textFieldTextColor];
    myTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
    myTextField.layer.borderColor = [[UIColor textfieldBorderColor]CGColor];
    myTextField.layer.borderWidth = 1.0f;
    myTextField.leftView = paddingView;
    myTextField.leftViewMode = UITextFieldViewModeAlways;
    myTextField.clearButtonMode = UITextFieldViewModeWhileEditing;

    return myTextField;
}

当我尝试使用myRect为CGRect创建文本字段时,我收到错误:

Sending 'CGRect *' (aka 'struct CGRect *') to parameter of incompatible type 'CGRect" (aka "struct CGRect')

我不明白传递CGRect有什么问题......

2 个答案:

答案 0 :(得分:8)

不要将指针传递给CGRect,只需传递结构本身。

-(UITextField *) standardTextField: (CGRect) myRect;

请注意,它是结构,而不是实际的对象

但是,如果你需要传入指向结构的指针,你可以取消引用它:

...
-(UITextField *) standardTextField: (CGRect *) myRect {
CGRect rectStruct = *myRect;
...
UITextField *myTextField = [[UITextField alloc] initWithFrame:rectStruct];
...

答案 1 :(得分:2)

initWithFrame:需要CGRect。您正在传递CGRect*参数。

我认为更改standardTextField:签名以取代CGRect会更简单。 否则,您需要取消引用CGRect指针:

UITextField *myTextField = [[UITextField alloc] initWithFrame:*myRect];