IOS从以编程方式制作的标签和步进器中减去

时间:2014-06-10 07:58:51

标签: ios uistepper

我正在为门票销售制作一个ipad应用程序,当我想减去时我遇到了问题..

UI就像这样:

  for(NSString *string in ticketArray){

    float y = 60*ticketCount+spaceFloat;

    //subView to contain one ticket
    UIView *ticketTypeView = [[UIView alloc]initWithFrame:CGRectMake(10, y, 1000, 60)];
    if(ticketCount%2){
    ticketTypeView.backgroundColor = [UIColor lightGrayColor];
    }

    [self.view addSubview:ticketTypeView];

    //label for ticket type name
    UILabel *ticketType = [[UILabel alloc]initWithFrame:CGRectMake(10, 3, 500, 50)];
    [ticketType setText:string];
    [ticketType setFont:[UIFont fontWithName:@"Helvetica neue" size:20.0]];
    [ticketTypeView addSubview:ticketType];


    //UIStepper for ticket amount
    UIStepper *stepper = [[UIStepper alloc]initWithFrame:CGRectMake(500, 16, 0, 0)];
    stepper.transform = CGAffineTransformMakeScale(1.2, 1.2);
    [stepper addTarget:self action:@selector(chanegestep:)    forControlEvents:UIControlEventValueChanged];
    stepper.maximumValue = 100;
    stepper.minimumValue = 0;
    [ticketTypeView addSubview:stepper];

    //label for price pr. ticket
    UILabel *pricePrTicket = [[UILabel alloc]initWithFrame:CGRectMake(620, 5, 100, 50)];
    [pricePrTicket setText:@"1000.50"];
    pricePrTicket.tag = kTagPriceTicket;
    [ticketTypeView addSubview:pricePrTicket];

    //totalPrice label
    UILabel *totalTypePrice = [[UILabel alloc]initWithFrame:CGRectMake(900, 5, 100, 50)];
    [totalTypePrice setText:@"0.00 Kr."];
    totalTypePrice.tag = kTagTotalTypePrice;
    [ticketTypeView addSubview:totalTypePrice];

    ticketCount++;
}  

}

我的ValueChanged方法:

 - (IBAction) chanegestep:(UIStepper *)sender {
double va = [sender value];
NSLog(@"stepper pressed");


//get the 2 labels for the price and for displaying price
UILabel *ticketprice = (UILabel *)[sender.superview viewWithTag:kTagPriceTicket];
UILabel *totalPrice = (UILabel *)[sender.superview viewWithTag:kTagTotalTypePrice];
double price = [ticketprice.text doubleValue];



//calc the total from that one ticet type
double totalDisplayed = va*price;

//add to the complete sales amount
completeSalesAmount += totalDisplayed;


NSLog(@"%.02f",completeSalesAmount);
if(ticketprice){
    totalPrice.text = [[NSString alloc]initWithFormat:@"%.02fKr.",totalDisplayed];
}

//activate btnContinue
if(completeSalesAmount!=0){
    [btnContinue setEnabled:YES];
}




//[ setText:[NSString stringWithFormat:@"%d", (int)va]];

}

我的问题:将数字加起来很好,但是当按下步进器上的“ - ”时,我必须以某种方式检测到,并从totalSalesAmount中减去给定票证的价格。

感谢任何帮助。

问候,即将到来的IOS开发xD

编辑:

每次调用valueChanged时都会计算completedSalesAmount。

所以假设我有两种票类型,每种都有1种。

ticket1 - 价格10 $ - 金额1,总计10 $(10 * 1)

completeSalesAmount - 0 + =(10 * 1)= 10 $

ticket2 - 价格10 $ - 金额1,总计10 $(10 * 1)

completeSalesAmount - 10 + =(10 * 1)= 20 $

现在在ticket1上按下“ - ”

ticket1 - 价格10 $ - 金额0,总计0 $(10 * 0)

completeSalesAmount + = 0 ...

1 个答案:

答案 0 :(得分:1)

问题在于您不知道步进器上按下了哪个按钮。您可以做的是将您的UIStepper子类化,就像这篇文章建议的那样:

UIStepper. Find out whether incremented or decremented

否则你可以创建一个函数来计算每个UIStepper的completeSalesAmount,你需要将你的UIStepper包装器放在一个数组中:

NSMutableArray *fullSteppers = [NSMutableArray arrayWithCapacity:[ticketArray count]];    

for(NSString *string in ticketArray){
    ...
    stepper.tag = kTagStepper;
    [fullSteppers addObject:ticketTypeView];
    ...
}

- (void)updateCompleteSalesAmount{
    completeSalesAmount = 0;
    for(UIView *fullStepper in fullSteppers){
        UILabel *ticketprice = (UILabel *)[fullStepper viewWithTag:kTagPriceTicket];
        UILabel *totalPrice = (UILabel *)[fullStepper viewWithTag:kTagTotalTypePrice];
        double price = [ticketprice.text doubleValue];

        UIStepper *stepper = (UIStepper *)[fullStepper viewWithTag:kTagStepper];
        completeSalesAmount += stepper.value * price;
    }
}

只需在你的changestep方法中调用更新函数:

- (IBAction) chanegestep:(UIStepper *)sender {
    ....
    [self updateCompleteSalesAmount];
}