【问题标题】:How do I call a method from a UIbutton selector?如何从 UIbutton 选择器调用方法?
【发布时间】:2013-07-16 20:14:56
【问题描述】:

如何从下面的按钮选择器代码中调用此方法:

- (void)displayEditorForImage:(UIImage *)imageToEdit

{

    AFPhotoEditorController *editorController = [[AFPhotoEditorController alloc] initWithImage:imageToEdit];

    [editorController setDelegate:self];

    [self presentViewController:editorController animated:YES completion:nil];

}

这是我尝试调用该方法的 UIButton:

//edit button
UIButton *editButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[editButton addTarget:self
               action:@selector(editBtnTouch)
     forControlEvents:UIControlEventTouchDown];

[editButton setTitle:@"Effects" forState:UIControlStateNormal];


**// the following line shows the selector where I'm unsure how to call the method from the code above**
if ([[UIScreen mainScreen] respondsToSelector:@selector(displayEditorForImage:)] &&
        ([UIScreen mainScreen].scale == 2.0)) {
        // Retina display
        editButton.frame = CGRectMake(220.0, 320.0, 60.0, 40.0);


} else {
    editButton.frame = CGRectMake(220.0, 315.0, 60.0, 40.0);
}

[self.view addSubview:editButton];

感谢您的帮助

【问题讨论】:

    标签: iphone ios objective-c methods


    【解决方案1】:

    当您添加到按钮的选择器被调用时,如果选择器允许,按钮本身将作为第一个参数传递。为了获得对您的图像的引用,您需要这样做(假设您想要的图像是按钮的背景图像):

    - (void)displayEditorForImage:(UIButton*)sender {
        UIImage* imageToEdit = [sender backgroundImageForState:UIControlStateNormal];
        AFPhotoEditorController *editorController = [[AFPhotoEditorController alloc] initWithImage:imageToEdit];
    
        [editorController setDelegate:self];
    
        [self presentViewController:editorController animated:YES completion:nil];
    }
    

    或者您需要创建一个自定义 UIButton,它具有关联图像的额外属性,然后只需通过选择器中的按钮访问图像:

    - (void)displayEditorForImage:(UIButton*)sender {
        if([sender isKindOfClass:[YourCustomButtonClass class]]) {
            UIImage* imageToEdit = ((YourCustomButtonClass*)sender).customImageProperty;
    
            AFPhotoEditorController *editorController = [[AFPhotoEditorController alloc] initWithImage:imageToEdit];
    
            [editorController setDelegate:self];
    
            [self presentViewController:editorController animated:YES completion:nil];
        }
    }
    

    编辑:

    您似乎对如何使UIButton 在被点击时调用方法感到困惑。您需要将定义方法的对象添加为按钮的目标(在本例中为self),将方法添加为选择器,并在点击按钮时调用该方法使用UIControlEventTouchUpInside。所以你的代码是:

    [editButton addTarget:self action:@selector(displayEditorForImage:) forControlEvents:UIControlEventTouchUpInside];
    

    【讨论】:

    • 感谢您的帖子。我想过去的图像不是按钮背景图像。而是显示在视图中的图像。
    • 好的。只要在调用选择器时引用了图像,就可以开始了。
    • 所以您希望在按下按钮时调用displayEditorForImage: 选择器?
    • 我只想从一个按钮调用这个方法 - (void)displayEditorForImage:(UIButton*)sender { };我认为我的方法调用语法是错误的。再次感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    相关资源
    最近更新 更多