2015-10-01 18:19:52 +02:00
|
|
|
#import "TGCollectionMultilineInputItem.h"
|
|
|
|
|
|
|
|
#import "TGCollectionMultilineInputItemView.h"
|
|
|
|
|
|
|
|
@interface TGCollectionMultilineInputItem () {
|
|
|
|
CGFloat _currentContainerWidth;
|
|
|
|
}
|
|
|
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
@implementation TGCollectionMultilineInputItem
|
|
|
|
|
|
|
|
- (instancetype)init {
|
|
|
|
self = [super init];
|
|
|
|
if (self != nil) {
|
|
|
|
self.selectable = false;
|
|
|
|
self.editable = true;
|
|
|
|
}
|
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (CGSize)itemSizeForContainerSize:(CGSize)containerSize {
|
|
|
|
_currentContainerWidth = containerSize.width;
|
|
|
|
CGFloat textHeight = [TGCollectionMultilineInputItemView heightForText:_text width:containerSize.width];
|
|
|
|
return CGSizeMake(containerSize.width, textHeight);
|
|
|
|
}
|
|
|
|
|
|
|
|
- (Class)itemViewClass {
|
|
|
|
return [TGCollectionMultilineInputItemView class];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)bindView:(TGCollectionMultilineInputItemView *)view {
|
|
|
|
[super bindView:view];
|
|
|
|
|
|
|
|
view.placeholder = _placeholder;
|
|
|
|
view.text = _text;
|
|
|
|
view.editable = _editable;
|
|
|
|
view.maxLength = _maxLength;
|
|
|
|
__weak TGCollectionMultilineInputItem *weakSelf = self;
|
|
|
|
view.textChanged = ^(NSString *text) {
|
|
|
|
__strong TGCollectionMultilineInputItem *strongSelf = weakSelf;
|
|
|
|
if (strongSelf != nil) {
|
|
|
|
CGFloat previousHeight = [TGCollectionMultilineInputItemView heightForText:strongSelf->_text width:strongSelf->_currentContainerWidth];
|
|
|
|
strongSelf->_text = text;
|
|
|
|
if (strongSelf->_textChanged) {
|
|
|
|
strongSelf->_textChanged(text);
|
|
|
|
}
|
|
|
|
CGFloat currentHeight = [TGCollectionMultilineInputItemView heightForText:strongSelf->_text width:strongSelf->_currentContainerWidth];
|
|
|
|
if (ABS(currentHeight - previousHeight) > FLT_EPSILON) {
|
|
|
|
if (strongSelf->_heightChanged) {
|
|
|
|
strongSelf->_heightChanged();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)unbindView {
|
|
|
|
((TGCollectionMultilineInputItemView *)self.boundView).textChanged = nil;
|
|
|
|
|
|
|
|
[super unbindView];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)setEditable:(bool)editable {
|
|
|
|
_editable = editable;
|
|
|
|
|
|
|
|
[(TGCollectionMultilineInputItemView *)[self boundView] setEditable:editable];
|
|
|
|
|
|
|
|
self.selectable = !editable;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (bool)itemWantsMenu {
|
|
|
|
return !_editable;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (bool)itemCanPerformAction:(SEL)action {
|
|
|
|
if (!_editable) {
|
|
|
|
return action == @selector(copy:);
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
- (void)itemPerformAction:(SEL)action {
|
|
|
|
if (action == @selector(copy:)) {
|
|
|
|
[[UIPasteboard generalPasteboard] setString:_text];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-02-25 01:03:51 +01:00
|
|
|
- (void)itemSelected:(id)__unused actionTarget
|
|
|
|
{
|
|
|
|
if (_selected) {
|
|
|
|
_selected();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)becomeFirstResponder {
|
|
|
|
[(TGCollectionMultilineInputItemView *)[self boundView] becomeFirstResponder];
|
|
|
|
}
|
|
|
|
|
2015-10-01 18:19:52 +02:00
|
|
|
@end
|