如何用NSString标签识别视图?

bit*_*com 4 iphone nsstring

view.tag仅存储NSInteger Value.

那么,如何用NSString Value识别每个视图?

不可用?

一些例子:

view0.stringTag = @"basic";

view1.stringTag = @"advanced";
Run Code Online (Sandbox Code Playgroud)

Nik*_*uhe 15

没有stringTag财产UIView.如果您需要执行此类操作,可以使用类别UIView并将标记存储在关联对象中:

@interface UIView (StringTagAdditions)
@property (nonatomic, copy) NSString *stringTag;
@end

@implementation UIView (StringTagAdditions)
static NSString *kStringTagKey = @"StringTagKey";
- (NSString *)stringTag
{
    return objc_getAssociatedObject(self, kStringTagKey);
}
- (void)setStringTag:(NSString *)stringTag
{
    objc_setAssociatedObject(self, kStringTagKey, stringTag, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
@end
Run Code Online (Sandbox Code Playgroud)


小智 7

if use ARC

#import "UIView.h"
#import <objc/runtime.h>

@implementation UIView (StringTagAdditions)
static NSString *kStringTagKey = @"StringTagKey";
- (NSString *)stringTag
{
    return objc_getAssociatedObject(self, CFBridgingRetain(kStringTagKey));
}
- (void)setStringTag:(NSString *)stringTag
{
    objc_setAssociatedObject(self, CFBridgingRetain(kStringTagKey), stringTag, OBJC_ASSOCIATION_COPY_NONATOMIC);
}

@end
Run Code Online (Sandbox Code Playgroud)


jrt*_*ton 5

不,你不能使用字符串.如果您的目标是代码可读性,则可以使用枚举.但是,请务必从1开始枚举,因为0是所有视图的默认标记:

typedef enum {
    vtBasic = 1,
    vtAdvanced
} ViewType;
...
view0.tag = vtBasic;
Run Code Online (Sandbox Code Playgroud)