2

我想做一个简单的方法来记录视图的框架,但也记录特定视图输入的名称。除了输入字符串作为方法的参数之外,是否有一种简单的方法可以获得与被调用视图等效的字符串?

-(void)printViewFrame:(UIView*)view { 

    NSLog(@"%@'s frame is: origin x: %f, origin y: %f, size x: %f, size y: %f", view ,view.frame.origin.x, view.frame.origin.y, view.frame.size.width, view.frame.size.height);

}

[self printViewFrame:myView];

注意:现在我只是这样做,这有点难看:

-(void)printViewFrame:(UIView*)view name:(NSString*)name {

    NSLog(@"%@'s frame: %@",name, NSStringFromCGRect(view.frame));

}
4

4 回答 4

4

要获取视图的框架,您可以使用NSStringFromCGRect

NSLog(@"%@",NSStringFromCGRect(view.frame));

但是如果你想得到视图的名字,你必须将它作为一个 NSString 传递。您只能读取指针的内存地址,而不能读取它的真实名称。你最接近这个的是

NSLog(@"%@",NSStringFromClass([view class]));

这将输出

界面视图

于 2013-01-08T12:02:03.223 回答
1

你的方法调用

[self printViewFrame:myView];

方法实现

-(void)printViewFrame:(UIView*)view { 

    NSLog(@"%@ : %@", NSStringFromCGRect(view.frame),NSStringFromClass(view.class));

}
于 2013-01-08T12:07:46.473 回答
0

-(void)printViewFrame:我认为实现所需功能的唯一可能方法是在调用方法之前记录变量的名称

于 2013-01-08T12:13:41.323 回答
0

我不知道如何用一些标准函数来做到这一点,但我可以用宏来做到这一点:

#define PRINT_NAME(var) NSLog(@"%s", #var)

然后,您只需调用它并打印变量的名称:

PRINT_NAME(view);

您还可以使用它来获取NSString所需的名称:

#define GET_NAME_STRING(var) [NSString stringWithFormat:@"%s", #var]

像这样使用它:

NSLog(@"frame stuff %f,...., NAME IS %@", frame.x, ..., GET_NAME_STRING(view));

如果您只需要一种方法(或某些方法),您可以做一些定义来做您想做的事:

#define CALL_PRINT(var) NSLog(@"%s", #var); [self printViewFrame:var]

所以,当你打电话

CALL_PRINT(myView);

它将打印视图名称,然后调用该printViewFrame函数。

另外,如果你不想用宏做任何事情,在那里发现了一些东西:被触摸的 UIView 的名称

于 2013-01-08T12:17:44.177 回答