1

I have a tableview where each cell has a UISwitch , when i select a cell i will be able to toggle UISwitch ,when i select the next cell in tableview i shouldn't be able to toggle it or even if i want to toggle it the earlier selected toggle should get switched off with a UIAlertView ,,so basically only one UITableViewCell should be allowed to toggle.

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

static NSString *cellIdentifier=@"cellIdentifier";
        PPtableCell *cell=(PPtableCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

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

        cell.remedyImage.image=[[remedyArray objectAtIndex:indexPath.row]objectForKey:@"RemedyImageDic"];
        cell.remedyTextLabel.text=[[remedyArray objectAtIndex:indexPath.row]objectForKey:@"RemedyTxtDic"];
        cell.remedyLabel.text=[[remedyArray objectAtIndex:indexPath.row]objectForKey:@"RemedyName"];
        cell.remedyID=[[[remedyArray objectAtIndex:indexPath.row]objectForKey:@"RemedyID"]intValue];
        cell.frequency = [[[remedyArray objectAtIndex:indexPath.row]objectForKey:@"RemedyFrequency"]intValue];
        cell.symptomIDNo =[[[remedyArray objectAtIndex:indexPath.row]objectForKey:@"SymptomID"]intValue];

        // cell.textLabel.text = [[notify objectAtIndex:indexPath.row] objectForKey:@"notifyData"];


        //  Specific Background Image Depending upon the Row

        if (indexPath.row==0)
        {
            cell.backgroundCellImage.image=[UIImage imageNamed:@"top-cell.png"];
        }
        else if (indexPath.row==remedyArray.count-1)
        {
            cell.backgroundCellImage.image=[UIImage imageNamed:@"bottom-cell.png"];
        }
        else
        {
            cell.backgroundCellImage.image=[UIImage imageNamed:@"middle-cell.png"];
        }


        if ([indexPath isEqual:remedySelectedIndexPath])
        {
            cell.isZoomedIn = YES;
        }
        else
        {
            cell.isZoomedIn = NO;
        }

        return cell;

    }

}



-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

if(tableView==remedyTableView)
    {

        PPtableCell *cell = nil;
        cell=( PPtableCell*)[tableView cellForRowAtIndexPath:indexPath];
        cell.selectionStyle=UITableViewCellSelectionStyleNone;
        CGSize maximumLabelSize=CGSizeMake(320.0,100.0);
        CGSize expectedLabelSize=[cell.remedyTextLabel.text sizeWithFont:cell.remedyTextLabel.font constrainedToSize:maximumLabelSize
                                                           lineBreakMode:cell.remedyTextLabel.lineBreakMode];

        if (expectedLabelSize.height > 17 || expectedLabelSize.width > 260.0)
        {
            if ([indexPath isEqual:remedySelectedIndexPath])
            {
                remedySelectedIndexPath = nil;
                [remedyTableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];

            }
            else
            {
                oldSelectedIndexPath=remedySelectedIndexPath;
                remedySelectedIndexPath=indexPath;

                if (oldSelectedIndexPath==nil)
                {
                    [remedyTableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:remedySelectedIndexPath] withRowAnimation:UITableViewRowAnimationNone];

                }

                else
                {
                    [remedyTableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:oldSelectedIndexPath,remedySelectedIndexPath,nil] withRowAnimation:UITableViewRowAnimationNone];

                }
            }

        }

    }

}

Here is the code that deals with the UISwitches:

(IBAction)notification:(id)sender {
    if (sender == notifyMe) {
        if(notifyMe.isOn == YES) {
            toggle = YES; 
            NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; 
            [defaults setBool:notifyMe.on forKey:@"switchValueKey"]; 
            [defaults synchronize]; 
            NSLog(@"Notification is ON");
        } 
    } else { 
        toggle = NO; 
    } 
} 

if ([cellDelegate respondsToSelector:@selector(notificationReqd:)]) { 
    [cellDelegate notificationReqd:self];
} 
}
4

3 に答える 3

4

3ステップ-

  1. のすべてsetUserInteractionEnabledに設定NOUISwitchtableView:cellForRowAtIndexPath:

  2. の特定のセルに設定しsetUSerIntertactionEnabledますYESUISwitchtableView:didSelectRowAtIndexPath

  3. の特定のセルに設定しsetUSerIntertactionEnabledますNOUISwitchtableView:didDeselectRowAtIndexPath

それはあなたがする必要があるすべてです。

編集:

2 と 3 では、選択または選択解除するセルの参照を取得する必要があります。

そのためには、2と3の両方で次のことを行う必要があります

UITableViewCell *cell=[yourTableView cellForRowAtIndexPath:indexPath];  
cell.notifyMe setUserInteractionEnable=YES; // set NO for step 3
于 2012-12-10T09:02:46.440 に答える
0

スイッチで同様のシミュレーションを行いました。UiSwitch にタグを割り当てたカスタム ビューを作成し、デフォルトでユーザー インタラクションを無効にしました。このビューは、cellForRowAtIndexPath メソッドでセルのアクセサリビューとして設定されました。

アクティブなセル作業の相互作用を有効にするには

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath

NSIndexpath によると、yourtableview セルでスイッチを使用して customview を見つけ、その userinteractionenabled プロパティを YES に設定します

于 2012-12-10T08:49:07.750 に答える
0

ユーザー エクスペリエンスを向上させるにnotifyMe.enabledは、 ではなくを使用する必要がありますnotifyMe.userInteractionEnabled

最初に、すべてのスイッチを無効にします。あなたはこれを達成することができますcellForRowAtIndexPath:

…
cell.notifyMe.enabled = NO;
…

選択解除されているセルのスイッチを無効にするには:

- (NSIndexPath *)tableView:(UITableView *)tableView willDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView == tableViewThatDealsWithSwitches)
    {
        PPtableCell *cell = (PPTableCell *)[tableView cellForRowAtIndexPath:indexPath];
        cell.notifyMe.enabled = NO;
    }
    return indexPath;
}

そして、すぐに選択されるセルのスイッチを有効にするには:

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView == tableViewThatDealsWithSwitches)
    {
        cell.notifyMe.enabled = YES;
        return indexPath;
    }
}
于 2012-12-19T09:10:39.630 に答える