diff --git a/Masonry.xcodeproj/project.pbxproj b/Masonry.xcodeproj/project.pbxproj index 0bd736a..2f83836 100644 --- a/Masonry.xcodeproj/project.pbxproj +++ b/Masonry.xcodeproj/project.pbxproj @@ -30,8 +30,6 @@ DD52F26A179CB365005CD195 /* MASCompositeConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = DD52F1DC179CAACA005CD195 /* MASCompositeConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; DD7CC16E17ACCF22007A469E /* NSLayoutConstraint+MASDebugAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DD7CC16C17ACCF21007A469E /* NSLayoutConstraint+MASDebugAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; DD7CC16F17ACCF22007A469E /* NSLayoutConstraint+MASDebugAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DD7CC16D17ACCF22007A469E /* NSLayoutConstraint+MASDebugAdditions.m */; }; - DD7CC17217ACDC7A007A469E /* NSObject+MASKeyAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DD7CC17017ACDC7A007A469E /* NSObject+MASKeyAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD7CC17317ACDC7A007A469E /* NSObject+MASKeyAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DD7CC17117ACDC7A007A469E /* NSObject+MASKeyAdditions.m */; }; DD93AAF317ACB647008F7D21 /* MASLayoutConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = DD93AAF117ACB647008F7D21 /* MASLayoutConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; DD93AAF417ACB647008F7D21 /* MASLayoutConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = DD93AAF217ACB647008F7D21 /* MASLayoutConstraint.m */; }; DDE2653F179D24E600D48565 /* UIView+MASShorthandAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DDE2653D179D24E600D48565 /* UIView+MASShorthandAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -89,8 +87,6 @@ DD52F1ED179CAAEE005CD195 /* Masonry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Masonry.h; sourceTree = "<group>"; }; DD7CC16C17ACCF21007A469E /* NSLayoutConstraint+MASDebugAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSLayoutConstraint+MASDebugAdditions.h"; sourceTree = "<group>"; }; DD7CC16D17ACCF22007A469E /* NSLayoutConstraint+MASDebugAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSLayoutConstraint+MASDebugAdditions.m"; sourceTree = "<group>"; }; - DD7CC17017ACDC7A007A469E /* NSObject+MASKeyAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+MASKeyAdditions.h"; sourceTree = "<group>"; }; - DD7CC17117ACDC7A007A469E /* NSObject+MASKeyAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+MASKeyAdditions.m"; sourceTree = "<group>"; }; DD93AAF117ACB647008F7D21 /* MASLayoutConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASLayoutConstraint.h; sourceTree = "<group>"; }; DD93AAF217ACB647008F7D21 /* MASLayoutConstraint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASLayoutConstraint.m; sourceTree = "<group>"; }; DDE2653D179D24E600D48565 /* UIView+MASShorthandAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+MASShorthandAdditions.h"; sourceTree = "<group>"; }; @@ -207,8 +203,6 @@ DD52F1E5179CAACA005CD195 /* UIView+MASAdditions.h */, DD52F1E6179CAACA005CD195 /* UIView+MASAdditions.m */, DDE2653D179D24E600D48565 /* UIView+MASShorthandAdditions.h */, - DD7CC17017ACDC7A007A469E /* NSObject+MASKeyAdditions.h */, - DD7CC17117ACDC7A007A469E /* NSObject+MASKeyAdditions.m */, DD7CC16C17ACCF21007A469E /* NSLayoutConstraint+MASDebugAdditions.h */, DD7CC16D17ACCF22007A469E /* NSLayoutConstraint+MASDebugAdditions.m */, ); @@ -249,7 +243,6 @@ DD52F269179CB34A005CD195 /* MASViewConstraint.h in Headers */, DD93AAF317ACB647008F7D21 /* MASLayoutConstraint.h in Headers */, DD52F26A179CB365005CD195 /* MASCompositeConstraint.h in Headers */, - DD7CC17217ACDC7A007A469E /* NSObject+MASKeyAdditions.h in Headers */, DD7CC16E17ACCF22007A469E /* NSLayoutConstraint+MASDebugAdditions.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; @@ -390,7 +383,6 @@ DD52F1EB179CAACA005CD195 /* UIView+MASAdditions.m in Sources */, DD93AAF417ACB647008F7D21 /* MASLayoutConstraint.m in Sources */, DD7CC16F17ACCF22007A469E /* NSLayoutConstraint+MASDebugAdditions.m in Sources */, - DD7CC17317ACDC7A007A469E /* NSObject+MASKeyAdditions.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Masonry/MASCompositeConstraint.m b/Masonry/MASCompositeConstraint.m index 0862d79..b787f89 100644 --- a/Masonry/MASCompositeConstraint.m +++ b/Masonry/MASCompositeConstraint.m @@ -9,10 +9,10 @@ #import "MASCompositeConstraint.h" #import "UIView+MASAdditions.h" #import "MASViewConstraint.h" -#import "NSObject+MASKeyAdditions.h" @interface MASCompositeConstraint () <MASConstraintDelegate> +@property (nonatomic, strong) id mas_key; @property (nonatomic, strong) NSMutableArray *childConstraints; @end diff --git a/Masonry/MASLayoutConstraint.h b/Masonry/MASLayoutConstraint.h index 7705308..4592f7b 100644 --- a/Masonry/MASLayoutConstraint.h +++ b/Masonry/MASLayoutConstraint.h @@ -14,4 +14,9 @@ */ @interface MASLayoutConstraint : NSLayoutConstraint +/** + * a key to associate with this constraint + */ +@property (nonatomic, strong) id mas_key; + @end diff --git a/Masonry/MASViewConstraint.m b/Masonry/MASViewConstraint.m index 920c5db..bbcb535 100644 --- a/Masonry/MASViewConstraint.m +++ b/Masonry/MASViewConstraint.m @@ -9,7 +9,6 @@ #import "MASViewConstraint.h" #import "MASCompositeConstraint.h" #import "MASLayoutConstraint.h" -#import "NSObject+MASKeyAdditions.h" @interface MASViewConstraint () @@ -20,6 +19,7 @@ @property (nonatomic, assign) CGFloat layoutMultiplier; @property (nonatomic, assign) CGFloat layoutConstant; @property (nonatomic, assign) BOOL hasLayoutRelation; +@property (nonatomic, strong) id mas_key; @end diff --git a/Masonry/NSLayoutConstraint+MASDebugAdditions.h b/Masonry/NSLayoutConstraint+MASDebugAdditions.h index bcbb7cc..1e41792 100644 --- a/Masonry/NSLayoutConstraint+MASDebugAdditions.h +++ b/Masonry/NSLayoutConstraint+MASDebugAdditions.h @@ -7,7 +7,6 @@ // #import <UIKit/UIKit.h> -#import "NSObject+MASKeyAdditions.h" /** * makes debug and log output of NSLayoutConstraints more readable @@ -16,3 +15,20 @@ @end +/** + * Allows you to attach keys to objects matching the variable names passed. + * + * view1.mas_key = @"view1", view2.mas_key = @"view2"; + * + * is equivalent to: + * + * MASAttachKeys(view1, view2); + */ +#define MASAttachKeys(...) \ + NSDictionary *keyPairs = NSDictionaryOfVariableBindings(__VA_ARGS__); \ + for (id key in keyPairs.allKeys) { \ + id obj = keyPairs[key]; \ + NSAssert([obj respondsToSelector:@selector(setMas_key:)], \ + @"Cannot attach mas_key to %@", obj); \ + [obj setMas_key:key]; \ + } \ No newline at end of file diff --git a/Masonry/NSLayoutConstraint+MASDebugAdditions.m b/Masonry/NSLayoutConstraint+MASDebugAdditions.m index 490ba39..787254e 100644 --- a/Masonry/NSLayoutConstraint+MASDebugAdditions.m +++ b/Masonry/NSLayoutConstraint+MASDebugAdditions.m @@ -8,6 +8,7 @@ #import "NSLayoutConstraint+MASDebugAdditions.h" #import "MASConstraint.h" +#import "MASLayoutConstraint.h" @implementation NSLayoutConstraint (MASDebugAdditions) @@ -66,7 +67,7 @@ #pragma mark - description override + (NSString *)descriptionForObject:(id)obj { - if ([obj mas_key]) { + if ([obj respondsToSelector:@selector(mas_key)] && [obj mas_key]) { return [NSString stringWithFormat:@"%@:%@", [obj class], [obj mas_key]]; } return [NSString stringWithFormat:@"%@:%p", [obj class], obj]; diff --git a/Masonry/NSObject+MASKeyAdditions.h b/Masonry/NSObject+MASKeyAdditions.h deleted file mode 100644 index add4946..0000000 --- a/Masonry/NSObject+MASKeyAdditions.h +++ /dev/null @@ -1,34 +0,0 @@ -// -// NSObject+MASKeyAdditions.h -// Masonry -// -// Created by Jonas Budelmann on 3/08/13. -// Copyright (c) 2013 Jonas Budelmann. All rights reserved. -// - -#import <Foundation/Foundation.h> - -@interface NSObject (MASKeyAdditions) - -/** - * a key to associate with this object - */ -@property (nonatomic, strong) id mas_key; - -@end - -/** - * Allows you to attach keys to objects matching the variable names passed. - * - * view1.mas_key = @"view1", view2.mas_key = @"view2"; - * - * is equivalent to: - * - * MASAttachKeys(view1, view2); - */ -#define MASAttachKeys(...) \ - NSDictionary *keyPairs = NSDictionaryOfVariableBindings(__VA_ARGS__); \ - for (id key in keyPairs.allKeys) { \ - [keyPairs[key] setMas_key:key]; \ - } - \ No newline at end of file diff --git a/Masonry/NSObject+MASKeyAdditions.m b/Masonry/NSObject+MASKeyAdditions.m deleted file mode 100644 index 85d86a0..0000000 --- a/Masonry/NSObject+MASKeyAdditions.m +++ /dev/null @@ -1,22 +0,0 @@ -// -// NSObject+MASKeyAdditions.m -// Masonry -// -// Created by Jonas Budelmann on 3/08/13. -// Copyright (c) 2013 Jonas Budelmann. All rights reserved. -// - -#import "NSObject+MASKeyAdditions.h" -#import <objc/runtime.h> - -@implementation NSObject (MASKeyAdditions) - -- (id)mas_key { - return objc_getAssociatedObject(self, @selector(mas_key)); -} - -- (void)setMas_key:(id)key { - objc_setAssociatedObject(self, @selector(mas_key), key, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -@end diff --git a/Masonry/UIView+MASAdditions.h b/Masonry/UIView+MASAdditions.h index f2f8727..014220f 100644 --- a/Masonry/UIView+MASAdditions.h +++ b/Masonry/UIView+MASAdditions.h @@ -32,6 +32,11 @@ @property (nonatomic, strong, readonly) MASViewAttribute *mas_baseline; /** + * a key to associate with this view + */ +@property (nonatomic, strong) id mas_key; + +/** Creates a MASConstraintMaker with the callee view. any constraints defined are added to the view or the appropriate superview once the block has finished executing @param block scope within which you can build up the constraints which you wish to apply to the view. diff --git a/Masonry/UIView+MASAdditions.m b/Masonry/UIView+MASAdditions.m index 78fe08a..fb4137f 100644 --- a/Masonry/UIView+MASAdditions.m +++ b/Masonry/UIView+MASAdditions.m @@ -7,6 +7,7 @@ // #import "UIView+MASAdditions.h" +#import <objc/runtime.h> @implementation UIView (MASAdditions) @@ -63,4 +64,14 @@ return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeBaseline]; } +#pragma mark - key + +- (id)mas_key { + return objc_getAssociatedObject(self, @selector(mas_key)); +} + +- (void)setMas_key:(id)key { + objc_setAssociatedObject(self, @selector(mas_key), key, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + @end \ No newline at end of file