9
9
#import " SWTableViewCell.h"
10
10
#import " SWUtilityButtonView.h"
11
11
12
- static NSString * const kTableViewCellContentView = @" UITableViewCellContentView" ;
13
-
14
12
#define kSectionIndexWidth 15
15
13
#define kAccessoryTrailingSpace 15
16
14
#define kLongPressMinimumDuration 0 .16f
@@ -47,7 +45,7 @@ @implementation SWTableViewCell {
47
45
UIView *_contentCellView;
48
46
BOOL layoutUpdating;
49
47
}
50
-
48
+ @synthesize contentCellView = _contentCellView;
51
49
#pragma mark Initializers
52
50
53
51
- (instancetype )initWithCoder : (NSCoder *)aDecoder
@@ -89,27 +87,29 @@ - (void)initializer
89
87
[self .cellScrollView addSubview: _contentCellView];
90
88
91
89
// Add the cell scroll view to the cell
92
- UIView *contentViewParent = self ;
90
+ UIView *contentViewParent = _contentCellView ;
93
91
UIView *clipViewParent = self.cellScrollView ;
94
- if (![NSStringFromClass ([[self .subviews objectAtIndex: 0 ] class ]) isEqualToString: kTableViewCellContentView ])
95
- {
96
- // iOS 7
97
- contentViewParent = [self .subviews objectAtIndex: 0 ];
98
- clipViewParent = self;
99
- }
92
+
100
93
NSArray *cellSubviews = [contentViewParent subviews ];
101
- [self insertSubview: self .cellScrollView atIndex: 0 ];
94
+ [self .contentView insertSubview: self .cellScrollView atIndex: 0 ];
102
95
for (UIView *subview in cellSubviews)
103
96
{
104
97
[_contentCellView addSubview: subview];
105
98
}
106
99
107
100
// Set scroll view to perpetually have same frame as self. Specifying relative to superview doesn't work, since the latter UITableViewCellScrollView has different behaviour.
108
- [self addConstraints: @[
109
- [NSLayoutConstraint constraintWithItem: self .cellScrollView attribute: NSLayoutAttributeTop relatedBy: NSLayoutRelationEqual toItem: self attribute: NSLayoutAttributeTop multiplier: 1.0 constant: 0.0 ],
110
- [NSLayoutConstraint constraintWithItem: self .cellScrollView attribute: NSLayoutAttributeBottom relatedBy: NSLayoutRelationEqual toItem: self attribute: NSLayoutAttributeBottom multiplier: 1.0 constant: 0.0 ],
111
- [NSLayoutConstraint constraintWithItem: self .cellScrollView attribute: NSLayoutAttributeLeft relatedBy: NSLayoutRelationEqual toItem: self attribute: NSLayoutAttributeLeft multiplier: 1.0 constant: 0.0 ],
112
- [NSLayoutConstraint constraintWithItem: self .cellScrollView attribute: NSLayoutAttributeRight relatedBy: NSLayoutRelationEqual toItem: self attribute: NSLayoutAttributeRight multiplier: 1.0 constant: 0.0 ],
101
+ [self .contentView addConstraints: @[
102
+ [NSLayoutConstraint constraintWithItem: self .cellScrollView attribute: NSLayoutAttributeTop relatedBy: NSLayoutRelationEqual toItem: self .contentView attribute: NSLayoutAttributeTop multiplier: 1.0 constant: 0.0 ],
103
+ [NSLayoutConstraint constraintWithItem: self .cellScrollView attribute: NSLayoutAttributeBottom relatedBy: NSLayoutRelationEqual toItem: self .contentView attribute: NSLayoutAttributeBottom multiplier: 1.0 constant: 0.0 ],
104
+ [NSLayoutConstraint constraintWithItem: self .cellScrollView attribute: NSLayoutAttributeLeft relatedBy: NSLayoutRelationEqual toItem: self .contentView attribute: NSLayoutAttributeLeft multiplier: 1.0 constant: 0.0 ],
105
+ [NSLayoutConstraint constraintWithItem: self .cellScrollView attribute: NSLayoutAttributeRight relatedBy: NSLayoutRelationEqual toItem: self .contentView attribute: NSLayoutAttributeRight multiplier: 1.0 constant: 0.0 ],
106
+ ]];
107
+
108
+ [self .cellScrollView addConstraints: @[
109
+ [NSLayoutConstraint constraintWithItem: _contentCellView attribute: NSLayoutAttributeTop relatedBy: NSLayoutRelationEqual toItem: self .cellScrollView attribute: NSLayoutAttributeTop multiplier: 1.0 constant: 0.0 ],
110
+ [NSLayoutConstraint constraintWithItem: _contentCellView attribute: NSLayoutAttributeBottom relatedBy: NSLayoutRelationEqual toItem: self .cellScrollView attribute: NSLayoutAttributeBottom multiplier: 1.0 constant: 0.0 ],
111
+ [NSLayoutConstraint constraintWithItem: _contentCellView attribute: NSLayoutAttributeLeft relatedBy: NSLayoutRelationEqual toItem: self .cellScrollView attribute: NSLayoutAttributeLeft multiplier: 1.0 constant: 0.0 ],
112
+ [NSLayoutConstraint constraintWithItem: _contentCellView attribute: NSLayoutAttributeRight relatedBy: NSLayoutRelationEqual toItem: self .cellScrollView attribute: NSLayoutAttributeRight multiplier: 1.0 constant: 0.0 ],
113
113
]];
114
114
115
115
self.tapGestureRecognizer = [[UITapGestureRecognizer alloc ] initWithTarget: self action: @selector (scrollViewTapped: )];
@@ -127,13 +127,13 @@ - (void)initializer
127
127
// Such an approach is necessary in order for the utility views to sit on top to get taps, as well as allow the backgroundColor (and private UITableViewCellBackgroundView) to work properly.
128
128
129
129
self.leftUtilityClipView = [[UIView alloc ] init ];
130
- self.leftUtilityClipConstraint = [NSLayoutConstraint constraintWithItem: self .leftUtilityClipView attribute: NSLayoutAttributeRight relatedBy: NSLayoutRelationEqual toItem: self attribute: NSLayoutAttributeLeft multiplier: 1.0 constant: 0.0 ];
130
+ self.leftUtilityClipConstraint = [NSLayoutConstraint constraintWithItem: self .leftUtilityClipView attribute: NSLayoutAttributeRight relatedBy: NSLayoutRelationEqual toItem: _cellScrollView attribute: NSLayoutAttributeLeft multiplier: 1.0 constant: 0.0 ];
131
131
self.leftUtilityButtonsView = [[SWUtilityButtonView alloc ] initWithUtilityButtons: nil
132
132
parentCell: self
133
133
utilityButtonSelector: @selector (leftUtilityButtonHandler: )];
134
134
135
135
self.rightUtilityClipView = [[UIView alloc ] initWithFrame: self .bounds];
136
- self.rightUtilityClipConstraint = [NSLayoutConstraint constraintWithItem: self .rightUtilityClipView attribute: NSLayoutAttributeLeft relatedBy: NSLayoutRelationEqual toItem: self attribute: NSLayoutAttributeRight multiplier: 1.0 constant: 0.0 ];
136
+ self.rightUtilityClipConstraint = [NSLayoutConstraint constraintWithItem: self .rightUtilityClipView attribute: NSLayoutAttributeLeft relatedBy: NSLayoutRelationEqual toItem: self .contentView attribute: NSLayoutAttributeRight multiplier: 1.0 constant: 0.0 ];
137
137
self.rightUtilityButtonsView = [[SWUtilityButtonView alloc ] initWithUtilityButtons: nil
138
138
parentCell: self
139
139
utilityButtonSelector: @selector (rightUtilityButtonHandler: )];
@@ -157,23 +157,22 @@ - (void)initializer
157
157
clipView.clipsToBounds = YES ;
158
158
159
159
[clipViewParent addSubview: clipView];
160
- [self addConstraints: @[
160
+ [self .contentView addConstraints: @[
161
161
// Pin the clipping view to the appropriate outer edges of the cell.
162
- [NSLayoutConstraint constraintWithItem: clipView attribute: NSLayoutAttributeTop relatedBy: NSLayoutRelationEqual toItem: self attribute: NSLayoutAttributeTop multiplier: 1.0 constant: 0.0 ],
163
- [NSLayoutConstraint constraintWithItem: clipView attribute: NSLayoutAttributeBottom relatedBy: NSLayoutRelationEqual toItem: self attribute: NSLayoutAttributeBottom multiplier: 1.0 constant: 0.0 ],
164
- [NSLayoutConstraint constraintWithItem: clipView attribute: alignmentAttribute relatedBy: NSLayoutRelationEqual toItem: self attribute: alignmentAttribute multiplier: 1.0 constant: 0.0 ],
162
+ [NSLayoutConstraint constraintWithItem: clipView attribute: NSLayoutAttributeTop relatedBy: NSLayoutRelationEqual toItem: self .contentView attribute: NSLayoutAttributeTop multiplier: 1.0 constant: 0.0 ],
163
+ [NSLayoutConstraint constraintWithItem: clipView attribute: NSLayoutAttributeBottom relatedBy: NSLayoutRelationEqual toItem: self .contentView attribute: NSLayoutAttributeBottom multiplier: 1.0 constant: 0.0 ],
164
+ [NSLayoutConstraint constraintWithItem: clipView attribute: alignmentAttribute relatedBy: NSLayoutRelationEqual toItem: self .contentView attribute: alignmentAttribute multiplier: 1.0 constant: 0.0 ],
165
165
clipConstraint,
166
166
]];
167
167
168
168
[clipView addSubview: buttonView];
169
- [self addConstraints: @[
169
+ [clipView addConstraints: @[
170
170
// Pin the button view to the appropriate outer edges of its clipping view.
171
171
[NSLayoutConstraint constraintWithItem: buttonView attribute: NSLayoutAttributeTop relatedBy: NSLayoutRelationEqual toItem: clipView attribute: NSLayoutAttributeTop multiplier: 1.0 constant: 0.0 ],
172
172
[NSLayoutConstraint constraintWithItem: buttonView attribute: NSLayoutAttributeBottom relatedBy: NSLayoutRelationEqual toItem: clipView attribute: NSLayoutAttributeBottom multiplier: 1.0 constant: 0.0 ],
173
173
[NSLayoutConstraint constraintWithItem: buttonView attribute: alignmentAttribute relatedBy: NSLayoutRelationEqual toItem: clipView attribute: alignmentAttribute multiplier: 1.0 constant: 0.0 ],
174
174
175
175
// Constrain the maximum button width so that at least a button's worth of contentView is left visible. (The button view will shrink accordingly.)
176
- [NSLayoutConstraint constraintWithItem: buttonView attribute: NSLayoutAttributeWidth relatedBy: NSLayoutRelationLessThanOrEqual toItem: self .contentView attribute: NSLayoutAttributeWidth multiplier: 1.0 constant: -kUtilityButtonWidthDefault ],
177
176
]];
178
177
}
179
178
}
@@ -601,7 +600,7 @@ - (void)updateCellState
601
600
}
602
601
603
602
// Update the clipping on the utility button views according to the current position.
604
- CGRect frame = [self .contentView.superview convertRect: self .contentView .frame toView: self ];
603
+ CGRect frame = [_cellScrollView convertRect: _contentCellView .frame toView: self ];
605
604
frame.size .width = CGRectGetWidth (self.frame );
606
605
607
606
self.leftUtilityClipConstraint .constant = MAX (0 , CGRectGetMinX (frame) - CGRectGetMinX (self.frame ));
0 commit comments