gpt4 book ai didi

ios - 根据文本输入动态调整UITableViewCell的大小

转载 作者:行者123 更新时间:2023-12-01 17:09:19 25 4
gpt4 key购买 nike

我正在尝试根据其中包含的UITableViewCell的高度动态调整某些UITextView的大小。
通过保持指向UITextView的指针并将其内容大小保留在heightForRowAtIndexPath中,可以解决此问题,但是当整个表是动态创建的,且行数未知且行数包含UITextView时,这不是可能。
如果我可以在heightForRowAtIndexPath期间调用有问题的单元格会很容易,但是这会导致无限循环并崩溃,因为甚至在创建任何单元格之前都会调用此方法。
还有其他解决方案吗?

我正在为我的单元格使用UITableViewCell子类,如下所示:

- (void)initalizeInputView {
// Initialization code
self.selectionStyle = UITableViewCellSelectionStyleNone;
self.textView = [[UITextView alloc] initWithFrame:CGRectZero];
self.textView.autocorrectionType = UITextAutocorrectionTypeDefault;
self.textView.autocapitalizationType = UITextAutocapitalizationTypeNone;
self.textView.textAlignment = NSTextAlignmentRight;
self.textView.textColor = [UIColor lightBlueColor];
self.textView.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:17];
self.textView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
self.textView.keyboardType = UIKeyboardTypeDefault;
[self addSubview:self.textView];

self.textView.delegate = self;
}

- (BOOL)resignFirstResponder {
if (_delegate && [_delegate respondsToSelector:@selector(tableViewCell:didEndEditingWithLongString:)]) {
[_delegate tableViewCell:self didEndEditingWithLongString:self.stringValue];
}
return [super resignFirstResponder];
}

- (void)setKeyboardType:(UIKeyboardType)keyboardType
{
self.textView.keyboardType = keyboardType;
}

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
[self initalizeInputView];
}
return self;
}

- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
[self initalizeInputView];
}
return self;
}

- (void)setSelected:(BOOL)selected {
[super setSelected:selected];
if (selected) {
[self.textView becomeFirstResponder];
}
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
if (selected) {
[self.textView becomeFirstResponder];
}
}

- (void)setStringValue:(NSString *)value {
self.textView.text = value;
}

- (NSString *)stringValue {
return self.textView.text;
}

- (void)textViewDidBeginEditing:(UITextView *)textView
{
// For keyboard scroll
UITableView *tableView = (UITableView *)self.superview;
AppSetupViewController *parent = (AppSetupViewController *)_delegate;
parent.activeCellIndexPath = [tableView indexPathForCell:self];
}

- (void)textViewDidChange:(UITextView *)textView
{
if (textView.contentSize.height > contentRowHeight) {

contentRowHeight = textView.contentSize.height;

UITableView *tableView = (UITableView *)self.superview;
[tableView beginUpdates];
[tableView endUpdates];

[textView setFrame:CGRectMake(0, 0, 300.0, textView.contentSize.height)];
}
}

- (void)textViewDidEndEditing:(UITextView *)textView
{
if (_delegate && [_delegate respondsToSelector:@selector(tableViewCell:didEndEditingWithLongString:)]) {
[_delegate tableViewCell:self didEndEditingWithLongString:self.stringValue];
}
UITableView *tableView = (UITableView *)self.superview;
[tableView deselectRowAtIndexPath:[tableView indexPathForCell:self] animated:YES];
}

- (void)layoutSubviews {
[super layoutSubviews];
CGRect editFrame = CGRectInset(self.contentView.frame, 10, 10);

if (self.textLabel.text && [self.textLabel.text length] != 0) {
CGSize textSize = [self.textLabel sizeThatFits:CGSizeZero];
editFrame.origin.x += textSize.width + 10;
editFrame.size.width -= textSize.width + 10;
self.textView.textAlignment = NSTextAlignmentRight;
} else {
self.textView.textAlignment = NSTextAlignmentLeft;
}

self.textView.frame = editFrame;
}

像这样在 cellForRowAtIndexPath中创建:
else if ([paramType isEqualToString:@"longString"]) {
MyIdentifier = @"AppActionLongString";

LongStringInputTableViewCell *cell = (LongStringInputTableViewCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];
cell.textLabel.text = [[[_selectedAction objectForKey:@"parameters"] objectAtIndex:indexPath.row] objectForKey:@"name"];
cell.params = [[_selectedAction objectForKey:@"parameters"] objectAtIndex:indexPath.row];

cell.textView.text = [results objectAtIndex:indexPath.row];

return cell;
}

仅将高度传递回我的 ViewController中的变量是不好的,因为就像我说的那样,表中可能有多个这些单元格。

谢谢

最佳答案

使用此方法可以动态调整tableviewCell的大小。首先将用户输入存储在NSMutableArray中,然后重新加载表。希望对您有帮助。

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

NSString *msg =[self.messages objectAtIndex:indexPath.row];
CGSize textSize = { 120, 10000.0 };
CGSize size = [msg sizeWithFont:[UIFont systemFontOfSize:15]
constrainedToSize:textSize
lineBreakMode:UILineBreakModeWordWrap];


return size.height+20;
}

关于ios - 根据文本输入动态调整UITableViewCell的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17274829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com