0

テーブル ビューとその中に 2 つのカスタム セルがあります。(X) 記号、つまり十字記号と目盛り記号を使用したいと考えています。UITableViewCellAccessoryCheckmark があることはわかっていますが、(X) 記号をどうすればよいでしょうか。このためのカスタム アクセサリを用意できますか、またはこれを実現する方法はありますか?

私のコード:

#pragma mark - Table View Methods
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return  1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 2;
}

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    optionsLabelArray = [[NSArray alloc] initWithObjects:@"Yes", @"No", nil];

    static NSString *CellIdentifier = @"CheckerCell";
    CustomCell *cell =[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    cell.optionLabel.text = [optionsLabelArray objectAtIndex:indexPath.row];
    cell.optionLabelSubtitle.text = [optionsLabelSubtitleArray objectAtIndex:indexPath.row];
    if(indexPath.row == 0)
    {
        cell.textLabel.textColor = [UIColor colorWithRed:78/255.0 green:157/255.0 blue:19/255.0 alpha:1.0];
    }
    else if(indexPath.row == 1)
    {
        cell.textLabel.textColor = [UIColor colorWithRed:167/255.0 green:19/255.0 blue:43/255.0 alpha:1.0];
    }
    return cell;
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView ==_optionsTableView1) {
        UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

        previousSelectedCell1.accessoryType = UITableViewCellAccessoryNone;
        cell.accessoryType=UITableViewCellAccessoryCheckmark;
        previousSelectedCell1 = cell;
        NSLog(@"Row : %ld", (long)indexPath.row);
        if(indexPath.row == 0)
        {
            self.weatherSafeToPlay = YES;
        }
        else
        {
           // MatchDayDataController *sharedController = [MatchDayDataController sharedDataController];
           // sharedController.actions = [sharedController.actions stringByAppendingString:@"Check Weather. "];
            //[sharedController.actions appendString:@"Check Weather. "];

            self.weatherSafeToPlay = NO;
        }
        NSLog(@"Is Weather safe: %hhd", self.weatherSafeToPlay);
    }

    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}
4

2 に答える 2

2

クロスのアクセサリーの種類は聞いたことがありませんが、そのような場合は、単にユニコード文字を使用します.
画像を使用するよりも軽く、テキストを変更するだけの簡単なことです。

  • ✓ の場合は @"\u2713"</li>
  • @"\u2717" for ✗</li>

あなたはできる:

  1. 32by32 (または任意の次元) の UILabel (右/左/中央/どこでも) を持つカスタム UITableViewCell を作成します。
  2. -didSelectRowAtIndexPath で、この UILabel のテキストを変更できます
  3. チェックマークの場合は @"\u2713" またはクロスマークの場合は @"\u2717"

簡単な例(デフォルトのUITableViewCellのデフォルトのtextLabelで、アイデアのためだけに):

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    if([cell.textLabel.text isEqualToString:@"\u2713"]) {
        cell.textLabel.text = @"\u2717";
    }
    else {
        cell.textLabel.text = @"\u2713";
    }
}

または...カスタムセルを使用しない場合、次のようになります:

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

    if(cell == nil) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault
                                     reuseIdentifier:CellIdentifier];
    }

    //set your text to cell.textLabel.text

    //create your own UILabel
    UILabel *lblAcc = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 32, 32)];
    [lblAcc setTag:100];
    [lblAcc setText:@"?"];
    [lblAcc setBackgroundColor:[UIColor redColor]];
    [lblAcc setTextAlignment:NSTextAlignmentCenter];

    //set as custom AccessoryView on cell
    [cell setAccessoryView:lblAcc];

    return cell;
}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    NSString *strAccessory = [(UILabel *) [cell viewWithTag:100] text];

    //the -isEqualToString is a bit heavier than checking a simple bool or int value
    //so since you should be remembering the selected cells anyways, you can change
    //the if-logic to compare with a bool rather than the string comparison.
    //but for now, we'll do:
    if([strAccessory isEqualToString:@"\u2713"]) {
        [(UILabel *) [cell viewWithTag:100] setText:@"\u2717"];
    }
    else {
        [(UILabel *) [cell viewWithTag:100] setText:@"\u2713"];
    }
}

より多くのユニコード文字について... このリンク:
http://en.wikibooks.org/wiki/Unicode/List_of_useful_symbols

于 2013-11-08T05:36:28.343 に答える
1

テーブルセルのaccessoryViewに独自の画像を割り当てることができます。(X) 記号のイメージを作成し、そのイメージをaccessoryViewとして使用します。

cell.accessoryView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"Your X Image"]];
于 2013-11-08T05:31:46.313 に答える