UIButton标题不会一直更新

时间:2014-08-15 20:24:21

标签: ios uibutton

我正在以编程方式更改UIButton的标题,以显示NSMutableArray中的项目数。

有时,当我向数组添加项目时,标题不会更新。当我执行标题应该是NSLog时,它是正确的但按钮标题不会一直更新。

有人发现我的代码存在问题吗?

- (void) refreshAfterBlueToothScan
{
    /*************************************Refresh Displayed Total********************/

    //[_manualBCtemporaryCartArray26 removeAllObjects];

    //_manualBCtemporaryCartArray26 =  [[NSMutableArray alloc] init];

    [localTempArray removeAllObjects];

    if (!localTempArray)

    {
        localTempArray =  [[NSMutableArray alloc] init];
    }



    // Get the DBAccess object;
    DBAccess *dbAccess1 = [[DBAccess alloc] init];

    // Get the products array from the database

    //Get the latest NSMutableArray
    localTempArray = [dbAccess1 getProductsFromTmpSales];

    // Close the database because we are finished with it
    [dbAccess1 closeDatabase];



    //Count How many products in array

    int iNumberofArrayProducts;

    iNumberofArrayProducts = [localTempArray count];

    NSString* productCount = [NSString stringWithFormat:@"%i", iNumberofArrayProducts];

    NSLog(@"The NUMBER OF TmpTable PRODUCTS is %@",productCount);


    //Sum the selling price of the records in the _manualBCtemporaryCartArray26

    amountSum = [localTempArray valueForKeyPath:@"@sum.lTotalSellingPrice"];

    NSLog(@"The total TmpTable SELLING PRICE is %@",amountSum);



    NSNumberFormatter * formatter = [[NSNumberFormatter alloc]init];
    [formatter setNumberStyle:NSNumberFormatterDecimalStyle];
    [formatter setMaximumFractionDigits:2]; // Set this if you need 2 digits
    [formatter setMinimumFractionDigits:2]; // Set this if you need 2 digits
    NSString * newString =  [formatter stringFromNumber:[NSNumber numberWithFloat:[amountSum floatValue]]];

    NSLog(@"FORMATTED MONTHLY SALES IS,R%@",newString);

    //This is a hack that replaces the comma with a dot. I want to display the Price as      R2 000.10
    NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"/:,"];
    newString=[[newString componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @"."];


    NSString *item = [NSString stringWithFormat:@"R%@ (%i)",newString, iNumberofArrayProducts];


    /**********Play audio to warn user that item was added to cart*******/


    // ivar
    SystemSoundID mBeep;

    // Create the sound ID
    NSString* path = [[NSBundle mainBundle]
                      pathForResource:@"scanBarCode" ofType:@"mp3"];
    NSURL* url = [NSURL fileURLWithPath:path];
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)url, &mBeep);

    // Play the sound
    AudioServicesPlaySystemSound(mBeep);

    // Dispose of the sound
    //AudioServicesDisposeSystemSoundID(mBeep);

    /**********END - Play audio to warn user that item was added to cart*******/


    //When user scans the barcode, we want to display the product that was just scanned. This allows user to see what product they just scanned as it is automatically loaded on the shopping cart. Put IF Statement so this code only executes after the scanning barcode.

    [self.searchDisplayController setActive: YES animated: YES];
    //self.searchDisplayController.searchBar.hidden = NO;
    self.searchDisplayController.searchBar.text = [NSString stringWithFormat:@"%i",fklInventoryID];
    [self.searchDisplayController.searchBar becomeFirstResponder];
    [self.searchDisplayController.searchBar resignFirstResponder];

     NSLog(@"BUTTON ITEM IS,%@",item);
    [manualTotalPriceBtn setTitle: item forState: UIControlStateNormal];


    /*************************************END - Refresh Displayed Total********************/

}

3 个答案:

答案 0 :(得分:0)

试试这个:

[manualTotalPriceBtn setAttributedTitle:nil forState:UIControlStateNormal];
[manualTotalPriceBtn setTitle:item forState:UIControlStateNormal];

如果您使用的是xib文件,IB将为attributesTitle而不是标题设置您的值。

答案 1 :(得分:0)

尝试将按钮类型从系统更改为自定义。

答案 2 :(得分:0)

检查是否更新了主线程上的按钮。如果从您正在使用的任何蓝牙扫描仪模块的回调调用您的方法,它可能发生在背景线程上。这将导致按钮有时更新,有时不会或稍后更新。

如果没有,请检查按钮的superview属性是否为零。也许在代码中的某个位置创建一个bew按钮,将其添加到superview但忘记更新属性以指向它(或者更新未插入视图中的按钮的其他场景)。