/ / एक समयबद्ध क्रम में एक-एक करके दिखाए जाने वाले सरणी में UIButtons शीर्षक कैसे प्राप्त करें - iphone, वस्तुनिष्ठ-ग, iphone-sdk-3.0, uibutton

एक सरणी में UIButtons शीर्षक कैसे प्राप्त करें, प्रत्येक को एक समयबद्ध अनुक्रम में दिखाया जा सकता है - आईफोन, उद्देश्य-सी, आईफोन-एसडीके-3.0, यूबटन

मेरे कार्यक्रम में, मेरे पास एक सरणी में UIButtons की एक श्रृंखला है जो मैं चाहूंगा कि इसका शीर्षक एक समय पर एक-एक करके एक समय-सीमा में एक फ़ंक्शन को निष्पादित करने के बाद एक समय पर एक लूप में दिखाया जाए।

मेरे पास बटन से जुड़ा एक आईबीएक्शन है और जब छुआ जाएगा तो एक अन्य फ़ंक्शन कॉल करेगा जो कुछ ऑपरेशन करेगा और अंत में, उस सरणी में यूआईबटन के शीर्षक को बदल देगा।

समस्या यह है कि इसने उस विधि को निष्पादित करने के बाद पूरे बटन शीर्षक को एक साथ बदल दिया है लेकिन मैं चाहता हूं कि शीर्षक एक समयबद्ध क्रम में एक-एक करके दिखाया जाए।

स्पष्ट रूप से समझाने के लिए, यहाँ मेरे कोड हैं:

-(IBAction)touchedButton1:(id)sender
{
[self calculateSteps:0];
}


-(void)calculateSteps:(NSUInteger)hole_index2
{

index = hole_index2;

NSNumber *tempNumber = [marblesArray objectAtIndex:index];
stones = [tempNumber intValue];

[marblesArray replaceObjectAtIndex:index withObject:[NSNumber numberWithInt:0]];
[[buttonsArray objectAtIndex:index] setTitle:[NSString stringWithFormat:@"%d", [NSNumber numberWithInt:0].intValue] forState:UIControlStateNormal];


while(stones > 0) {

if (player == PLAYER_A && stones >= 1 && index == 6) {

NSNumber *tempNumber3 = [storeArray objectAtIndex:0];
NSUInteger tempInt3 = [tempNumber3 intValue];

tempInt3++;

[storeArray replaceObjectAtIndex:0 withObject:[NSNumber numberWithInt:tempInt3]];
[buttonPlayerA setTitle:[NSString stringWithFormat:@"%d", [NSNumber numberWithInt:tempInt3].intValue] forState:UIControlStateNormal];

stones--;


if (stones == 0) { // end in PLAYER A"s store

NSLog(@"end in big hole player A");

return;
}
}

if (player == PLAYER_B && stones >= 1 && index == 12) {

NSNumber *tempNumber4 = [storeArray objectAtIndex:1];
NSUInteger tempInt4 = [tempNumber4 intValue];

tempInt4++;

[storeArray replaceObjectAtIndex:1 withObject:[NSNumber numberWithInt:tempInt4]];
[buttonPlayerB setTitle:[NSString stringWithFormat:@"%d", [NSNumber numberWithInt:tempInt4].intValue] forState:UIControlStateNormal];

stones--;
if (stones == 0) { // end in PLAYER B"s store
NSLog(@"end in big hole player B");
return;
}
}



index++;
if (index >= NUM_HOLES) index = 0;

NSNumber *tempNumber2 = [marblesArray objectAtIndex:index];
tempInt2 = [tempNumber2 intValue];
tempInt2++;

[marblesArray replaceObjectAtIndex:index withObject:[NSNumber numberWithInt:tempInt2]];
NSLog(@"Number in marblesArray index: %d", [NSNumber numberWithInt:tempInt2].intValue);
[[buttonsArray objectAtIndex:index] setTitle:[NSString stringWithFormat:@"%d", [NSNumber numberWithInt:tempInt2].intValue] forState:UIControlStateNormal];

stones--;
}



}

इसलिए, मैंने NSTimer को अंदर लाने की कोशिश की हैगणना की विधि और उस में भी, जबकि लूप लेकिन काम नहीं कर सका। मुझे लगता है कि शायद लूप कार्य तेजी से पर्याप्त है कि यह समय पर काम करने के लिए NSTimer पाने का मौका नहीं मिला।

मुझे पता है कि अगर मैं टाइमर == 1, या का उपयोग करता हूं तो यह काम कर सकता हैयदि टाइमर == 2, आदि टाइमर की वृद्धि के रूप में, इसके साथ जुड़े प्रत्येक बटन उस अंतराल के बाद बदल जाएगा। हालाँकि, जब मैंने (टाइमर == 1; टाइमर <पत्थरों; टाइमर ++) के लिए उपयोग करने की कोशिश की, तो यह बटन को एक-एक करके एक-एक करके बटन दिखाते हैं लेकिन एक साथ लूप के साथ होने के बाद। क्या मैं अपने तर्क के साथ गलत हूं?

इसके अलावा, मैंने थोड़ी देर में नींद (2) डालने की कोशिश कीलूप भी, यह NSLog (@ "संख्या के लिए काम करता है। पत्थर सूचकांक में: ...") प्रत्येक 2 सेकंड दिखाई दे रहा है लेकिन फिर भी लूप पूरा होने के बाद भी बटन सरणी शीर्षक एक साथ दिखाया गया है।

मुझे यकीन नहीं है कि मैं बटन शीर्षक कैसे प्राप्त कर सकता हूंउस सरणी को समयबद्ध अनुक्रम में एक-एक करके दिखाया जाएगा। 2 दिनों के लिए कोशिश कर रहे हैं, लेकिन यह काम करने के लिए नहीं मिल सका। अगर कोई मेरी मदद कर सकता है तो उसकी सराहना करें। मैं नहीं जानता कि क्या यह मेरा तर्क है या यदि कोई अन्य फ़ंक्शन है जिसका उपयोग इस समस्या को हल करने के लिए किया जा सकता है।

पहले से ही बहुत - बहुत धन्यवाद।

उत्तर:

जवाब के लिए 0 № 1

हाँ, आप उपयोग कर सकते हैं:

  • NSTimer
  • या केवल performSelector: withObject: afterDelay: किसी भी NSObject उपवर्ग का।
    आप मुख्य धागे में नींद या लूप का उपयोग नहीं कर सकते। यह एचएमआई को ब्लॉक कर देगा।

लेकिन मैं वास्तव में आपके कोड और आपके स्पष्टीकरण को नहीं समझता ...

टाइमर के लक्ष्य चयनकर्ता में, टिक की संख्या की गणना करने के लिए आपके पास एक स्थिर इंट हो सकता है उदाहरण (बहुत सरल):

[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(onTimer) userInfo:nil repeats:NO];

-(void)onTimer{
static int ticks = 0;
ticks++;
if (ticks==1) {
//TODO
} else if (ticks==2) {
//TODO
} else if (ticks==3) {
//TODO
} else {
//TODO
ticks=0;
}
}