0

我正在尝试创建一个函数来更改 UILabel 或 UIButton 之类的大小,而不必每次都输入三行。这就是我所拥有的。

-(void)setObject:(UIControl*)object SizeWidth:(NSInteger)width Height:(NSInteger)height
{
    CGRect labelFrame = object.frame;
    labelFrame.size = CGSizeMake(width, height);
    object.frame = labelFrame;
}

但是,当我给 (UIControl*)object 一个 UILabel 时,它会显示“不兼容的指针类型”。我该如何解决这个问题以适用于我可以放在 UIView 上的任何东西?

4

4 回答 4

1

UILabel不是 的子类UIControl,它继承自UIView.

尝试更改UIControlUIView

-(void)setObject:(UIView*)object SizeWidth:(NSInteger)width Height:(NSInteger)height
{
    CGRect labelFrame = object.frame;
    labelFrame.size = CGSizeMake(width, height);
    object.frame = labelFrame;
}

(无论如何UIControl继承,并且是一个属性)UIViewframeUIView

于 2013-03-27T01:07:18.277 回答
0

遵循 Obj-C 风格的约定(为工作选择正确的工具)可以让其他人更有效地阅读和理解我们的代码。这里的 Objective-C 风格需要一些清理。如果您有兴趣,请参阅源代码后的我的注释。以更简洁的方式执行此操作:

您可以走类方法路线(也许在视图操作类中)

@implementation CCViewGeometry

+ (void)adjustView:(UIView *)view toSize:(CGSize)size
{
    CGRect frame = view.frame;
    frame.size = size;
    view.frame = frame;
}

@end

或 UIView 类别路由

@implementation UIView (CCGeometry)

- (void)resize:(CGSize)size
{
    CGRect frame = self.frame;
    frame.size = size;
    self.frame = frame;
}

@end

与此页面上的代码相关的样式说明:

  1. 所有方法参数都应以小写字符开头。

  2. setFoo:用于@property综合 & 按照惯例,您的方法名称表示将名为的属性设置objectobject. 您正在设置大小,而不是对象本身。

  3. 明确。setObject:当您知道要传递的对象的一般类型时,为什么还要调用一个方法?

  4. UIKit 中的宽度和高度(正确地)由 CGFloat 表示,而不是 NSInteger。为什么要通过 width + height 而不是 CGSize 呢?

  5. 在不需要状态时尝试使用类方法。+是你的朋友。不要为每一件小事都启动实例(我在 ObjC 代码中看到的大多数单例方法都应该重构为类方法)。

不关心小事的程序员最终会得到无法维护的代码——这些代码会减慢他们的速度,而那些会拖慢他们的代码。惯例和风格对任何体面的项目都很重要。

于 2013-03-27T02:20:53.273 回答
0

标签不是 UIControl 的子类。您可以使用 UIView 代替 UIControl。

Here is the hierarchy for UILabel  
UILabel: UIView : UIResponder : NSObject

-(void)setObject:(UIView*)object SizeWidth:(NSInteger)width Height:(NSInteger)height
{
    CGRect labelFrame = object.frame;
    labelFrame.size = CGSizeMake(width, height);
    object.frame = labelFrame;
}

给你的一个建议是,方法名称对我来说似乎有点奇怪。您可以编写一个简单的类别来更新 UIView 的大小。使用以下类别,您可以简单地调用

[myLabel setWidth:20 andHeight:20];

在 UIView + MyCategory.h

#import <UIKit/UIKit.h>

@interface UIView (MyCategory)

- (void)setWidth:(NSInteger)aWidth andHeight:(NSInteger)aHeight;

@end

在 UIView + MyCategory.m

#import "UIView + MyCategory.h"
@implementation UIView (MyCategory)

- (void)setWidth:(NSInteger)aWidth andHeight:(NSInteger)aHeight;
{
    CGRect frameToUpdate = self.frame;
    frameToUpdate.size = CGSizeMake(aWidth, aHeight);
    self.frame = frameToUpdate;
}

@end
于 2013-03-27T01:09:59.017 回答
0

为了解决您要解决的实际问题,我强烈建议您使用这组帮助程序https://github.com/kreeger/BDKGeometry

于 2013-03-27T01:36:34.440 回答