如何在Objective C中返回2个值?

时间:2015-06-22 01:26:14

标签: ios objective-c uiview uitextfield

我尝试同时返回 UITextField UIView (一个矩形框),这样我就可以在矩形UIView彩色框内有一个文本字段,但我一次只能返回一个值。是否可以返回2个值?或者我可以编辑文本字段以获得矩形彩色背景吗?此外,UITextField以编程方式调用,而不是从故事板调用。

非常感谢任何形式的帮助。谢谢。

3 个答案:

答案 0 :(得分:2)

您可以return帮助block两个值。

请在下方code找到它可能对您有所帮助。

- (void)getUIControlles:(void (^)(UITextField * objTextFiled, UIView * objView))completionBlock {


    UITextField * textFiled = nil;
    /*
     do code here for textfiled
     */

    UIView * viewDemo = nil;

    /*
     do code here for Uiview.
     */

    completionBlock (textFiled, viewDemo);
}

- (void) testMethod {

    // Call function with following way.

    [self getUIControlles:^(UITextField *objTextFiled, UIView *objView) {

//        objTextFiled = This is your textfiled object
//        objView = This is your view object

    }];


}

答案 1 :(得分:1)

在C,C ++和Objective-C中返回多个独立值的常用方法是通过指针:

@interface MyController (UIViewController)

- (void)getView:(UIView **)viewOut textField:(UITextField **)textFieldOut;

@end

@implementation MyController

- (void)getView:(UIView **)view textField:(UITextField **)textField {
    UIView *view = [[UIView alloc] init];
    // ... initialize view

    UITextField *textField = [[UITextField alloc] init];
    [view addSubview:textField];
    // ... initialize textField

    *viewOut = view;
    *textFieldOut = textField;
}

@end

Apple使用此模式,例如在+[NSStream getStreamsToHostWithName:port:inputStream:outputStream:]中(不在文档中,但在头文件中)。

使用示例:

    UIView *view;
    UITextField *textField;
    [myController getView:&view textField:&textField];
    [myController.view addSubview:view];

另一种方法是直接返回一个对象,另一个通过指针返回:

- (UITextField *)newTextFieldWithWrapperView:(UIView **)viewOut {
    UIView *view = [[UIView alloc] init];
    // ... initialize view

    UITextField *textField = [[UITextField alloc] init];
    [view addSubview:textField];
    // ... initialize textField

    *viewOut = view;
    return textField;
}

Apple使用此模式,例如在-[NSAttributedString initWithFileURL:options:documentAttributes:error:]中,它直接返回字符串,并可选择通过指针返回文档属性字典和错误对象。

答案 2 :(得分:0)

嗯,我从来没有在Objective C中编程,但是如果你坚持要返回2个值,那么创建一个Pair类就可以了。