3

配列を UITableView にロードしていますが、配列のコンポーネントが長くなっています。私がやりたいのは、セルの長さがテキストに合わせて調整されるようにセルをカスタマイズすることですが、幅は同じままです。現在何が起こっているかというと、テキストが長くなりすぎると、セルが消えてしまい、これが表示されます。

ここに画像の説明を入力

テキストがセルの最後に達してから新しい行を開始することを確認したいと思います。

私のコードは今このようになります。

@implementation CRHCommentSection
@synthesize observationTable; 

NSArray *myArray; 



- (void)viewDidLoad
{


    myArray = [CRHViewControllerScript theArray];  
    NSLog(@"%@", myArray);
    //NSArray* paths = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:0   inSection:1]];
   //[observationTable insertRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationTop];

   [observationTable reloadData]; 


    [super viewDidLoad];
// Do any additional setup after loading the view.

}



- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // Return the number of sections.

    NSLog(@" in method 1");
    return 1;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

 NSLog(@" in method 2");
// Return the number of rows in the section.
return [myArray count];


}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath  *)indexPath {

NSLog(@" in method 3");

static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewStylePlain reuseIdentifier:CellIdentifier];
}

cell.textLabel.text = [myArray objectAtIndex:indexPath.row];
//cell.textLabel.text = @"Label"; 


return cell;
}

また、他の誰かが複数のセルに対して書いたコードを見つけましたが、配列からの文字列の長さに基づいて自動化する方法がわかりません。

static NSString *CellIdentifier = @"MyCell"; 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
 cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2
 reuseIdentifier:CellIdentifier] autorelease];
}
cell.textLabel.text = @"Label';
cell.detailTextLabel.text = @"Multi-Line\nText";
cell.detailTextLabel.numberOfLines = 2;
cell.detailTextLabel.lineBreakMode = UILineBreakModeWordWrap;

彼らはまた、複数行のセルに適切な高さを返す必要があり、(44.0 + (numberOfLines - 1) * 19.0) の高さがうまくいくはずだと言いました。

誰にもこれを行う方法のアイデアはありますか?

ありがとう。

4

4 に答える 4

12

次の方法で作業する必要があります

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // this method is called for each cell and returns height
    NSString * text = @"Your very long text";
    CGSize textSize = [text sizeWithFont:[UIFont systemFontOfSize: 14.0] forWidth:[tableView frame].size.width - 40.0 lineBreakMode:NSLineBreakByWordWrapping];
    // return either default height or height to fit the text
    return textSize.height < 44.0 ? 44.0 : textSize.height;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString * cellIdentifier = @"YourTableCell";

    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 
                                      reuseIdentifier:cellIdentifier];

        [[cell textLabel] setNumberOfLines:0]; // unlimited number of lines
        [[cell textLabel] setLineBreakMode:NSLineBreakByWordWrapping];
        [[cell textLabel] setFont:[UIFont systemFontOfSize: 14.0]];
    }

    [[cell textLabel] setText:@"Your very long text"];

    return cell;
}
于 2012-08-08T22:57:54.847 に答える
0

私にとって、受け入れられた答えは、else条件を追加することで機能しました。私の場合、[tableView dequeueReusableCellWithIdentifier:@"comment"];常にnilではないセルを返すため、条件が満たされていない場合。

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSInteger item = indexPath.item;
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"comment"];

    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1
                                      reuseIdentifier:@"comment"];

        [[cell textLabel] setNumberOfLines:0]; // unlimited number of lines
        [[cell textLabel] setLineBreakMode:NSLineBreakByWordWrapping];
        [[cell textLabel] setFont:[UIFont systemFontOfSize: 14.0]];
    }
     // added else condition
    else {
        [[cell textLabel] setNumberOfLines:0];
        [[cell textLabel] setLineBreakMode:NSLineBreakByWordWrapping];
        [[cell textLabel] setFont:[UIFont systemFontOfSize: 14.0]];
    }

    [[cell textLabel] setText:commentsText[item]];

    return cell;
}
于 2016-10-10T14:51:46.803 に答える
0

テーブルビューセルで UITextView を使用するのはどうですか。

まず、セルの高さを変更する必要があります。

次に、UITextView をセルに配置します。

ss

ss

もちろん、これは IB ではなくコードで行うことができます。

于 2012-08-08T23:09:02.877 に答える