iphone - 转换发送方参数

标签 iphone objective-c cocoa-touch xcode

我有一个接受发件人并使用 UI 按钮调用的方法。如何将该对象转换为 UIImageView ?基本上我如何重用按钮的代码。

- (IBAction)startClick:(id)sender { 
    button.animationImages = [NSArray arrayWithObjects:
                                       [UIImage imageNamed:@"Pic_1.png"],
                                       [UIImage imageNamed:@"Pic_2.png"],
                                       [UIImage imageNamed:@"Pic_3.png"],
                                       nil];
    [button setAnimationRepeatCount:1];
    button.animationDuration = 1;
    [button startAnimating];
}

最佳答案

我的第一 react 是这样做可能是一个错误。 UIButtonUIImageViewUIView 的不同子类(UIButtonUIControl 的子类),因此它们唯一的共同点是 UIView 方法。如果 sender 确实是一个 UIButton,将其视为 UIImageView 可能会导致错误,例如“无法识别的选择器发送到实例”和之类的。

一般来说,更简洁的解决方案是创建一个单独的方法,该方法是 UIImageView 的操作。 (与 Java 不同,Objective-C 和 Cocoa 不喜欢根据事件类型将 UI 响应代码硬塞到单个方法中,而是根据需要发生的操作逻辑地组织代码。)

如果您必须从按钮和 ImageView 中调用此方法,您可以像这样分离逻辑:

- (IBAction) startClick:(id)sender {
  if ([sender isKindOfClass:UIButton]) {
    ...
  }
  else if ([sender isKindOfClass:UIImageView]) {
    ...
  }
}

关于iphone - 转换发送方参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1089752/

相关文章:

objective-c - 将 DTCoreText 与 xcode 项目集成

objective-c - iOS 设备上的钥匙串(keychain)可以保存与 NSString 不同的东西吗?

iphone - 如何从 Xcode 4 标记 Git 存储库

iphone - 我怎样才能制作一个水平选择器?

iphone - iPhone 应用程序中的 EXC_BAD_ACCESS - 内存管理问题

objective-c - iOS 上的 CoreLocation 仅在一定时间内监视后台的位置变化?

iphone - 帮助向 UITableViewCell 添加背景 View

objective-c - 使用 ARC 临时保留对象的最佳方法

ios - 以缩放模式运行的 iOS 8 应用程序是否使用 @3x 图像?

iphone - 在 iPhone 5 上使用 EGOPhotoViewController