2

こんにちはUILabel、 で同じ位置を繰り返すことに問題がありUITableViewます。

カスタムセルと 3 つがありUILabelsます。最初のラベルのみを に表示cellForRowAtIndexPathし、残りの 2 つを に表示しdidSelectRowAtIndexPathます。

セルをタップすると、さらに2つのラベルが表示されますが、TableViewをスクロールすると同じ位置で繰り返されます。

私を助けてください

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"English";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    if (isSearchOn) 
    {
         static NSString *CellIdentifier = @"English";
         UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
         NSString *cellValue = _searchResult [indexPath.row];
         cell.textLabel.text = cellValue;
         [cell.textLabel setFont:[UIFont fontWithName:@"Helvetica LT Std" size:22]];
    }
    else
    {
        ConversationInEnglish *con = _conversationsInfosnew [indexPath.row];
        _englishLabel = (UILabel *) [cell viewWithTag:10];
        _englishLabel.text = con.english;
        [_englishLabel setFont:[UIFont fontWithName:@"Helvetica LT Std" size:22]];
        UIButton *starButton = [UIButton buttonWithType:UIButtonTypeCustom];
        starButton.frame = CGRectMake(0 , 0 , 60, 37);
        UIImage *btnImage = [UIImage imageNamed:@"star.png"];
        [starButton setImage:btnImage forState:UIControlStateNormal];
        starButton.tag = indexPath.row;
        cell.accessoryType = UITableViewCellAccessoryNone;
        cell.accessoryView = starButton;
    }
    return cell;
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([self.expandedCellIndexPath isEqual:indexPath]){
    }
    else 
    {
        ConversationInEnglish *con = _conversationsInfosnew [indexPath.row];
        UITableViewCell *cell1 = [self.tableView cellForRowAtIndexPath:indexPath];
        _myanmarLabel = (UILabel *)[cell1 viewWithTag:222];
        _myanmarLabel.tag = indexPath.row;
        _myanmarLabel.text = con.myanmar;
        [_myanmarLabel setFont: [UIFont fontWithName:@"Masterpiece Uni Sans" size:16]];
        [cell1.contentView addSubview:_myanmarLabel];
        _tonebasedLabel = (UILabel *)[cell1 viewWithTag:333];
        _tonebasedLabel.tag = indexPath.row;
        _tonebasedLabel.text = con.tone_based;
        [_tonebasedLabel setFont:[UIFont fontWithName:@"Helvetica LT Std" size:15]];
        [cell1.contentView addSubview:_tonebasedLabel];
        _speaker = [UIButton buttonWithType:UIButtonTypeCustom];
        _speaker.frame = CGRectMake(100 , 80 , 150, 37);
        UIImage *btnImage = [UIImage imageNamed:@"speaker.png"];
        [_speaker setImage:btnImage forState:UIControlStateNormal];
        _speaker.tag = indexPath.row;
        [cell1.contentView addSubview:_speaker];
        self.expandedCellIndexPath = indexPath;
        self.expandedCellHeight = 110.0f;
    }
    [self.tableView beginUpdates];
    [self.tableView endUpdates];
}
4

3 に答える 3

0

それを行う最も簡単な方法は次のとおりです。

まず、データ配列と同じサイズの可変配列を 1 つ用意します (このようにします@property (nonatomic,strong) NSMutableArray *searchActive;)。

次に、tableView: didSelectRowAtIndexPath:メソッドに以下の行を追加します: [self.searchActive setObject:@"1" atIndexedSubscript:indexPath.row];(ここでは、配列でテキスト データを使用します。辞書オブジェクトを使用して可変配列としてデータ配列を作成することもできます。各辞書には、1 つはテーブルに表示するための 2 つのデータが含まれ、2 つ目は 2 つ目のデータです。タップされたセルを除氷する)。

この線の下で、[self.tableView beginUpdates];<#HERE#> [self.tableView endUpdates];

1行追加するだけ[self.tableView reloadData];

そして、tableView: cellForRowAtIndexPath:以下のように条件ステートメントを追加します。

if([[self.searchActive objectAtIndex:indexPath.row] isEqualToString:@"1"]) { <# display additional controls here or do what you want to change for the cell#> }

これで問題が解決します:)

EDIT プロパティを宣言した後@synthesize、.mファイルで必要です。

その後、次のようなステートメントを1つ入力するだけですself.activeCell = [NSMutableArray alloc]initWithArray:<#YOUR TableView's Data Source Array#>];ここでは、テーブルビューデータソースに文字列データが含まれていると想定しています

これはactiveCell、テーブルビューのデータソース配列と同じ数以上の配列を持たせるためにも必要です。

上記のステートメントをviewDidLoadメソッド内に配置します。

于 2013-03-07T06:16:29.680 に答える
0

UILabels が作成されたコードは、提供されたスニペットにはないように見えるため、これが問題であるかどうかはわかりませんが、UILabel フレームの原点が近すぎないことを確認してください。原点の 1 つは、2 つのビューを分離するために x 値を大きくする必要がある場合があります。

于 2013-03-02T07:18:15.063 に答える
0

yourtextfield.hidden = yes を indexpath の行のセルに入れてみてください。スクロールするたびにテキストフィールドが非表示になり、didselect でそれを示すことができます。これが役立つことを願っています

于 2013-03-02T07:19:45.030 に答える