ios - UISegmentedControl en NSString

Hallo ik heb de volgende code:

if(_deviceSegmentCntrl.selectedSegmentIndex == 0)
{
    deviceOne = [[NSString alloc] initWithFormat:@"string01"];
}
if(_deviceSegmentCntrl.selectedSegmentIndex == 1)
{
    deviceOne = [[NSString alloc] initWithFormat:@"string02"];
}
if(_deviceSegmentCntrl.selectedSegmentIndex == 2)
{
    deviceOne = [[NSString alloc] initWithFormat:@"string03"];
}

NSString *deviceType = [[NSString alloc] initWithFormat:_deviceSegmentCntrl];

Ik wil dat de NSString de string uitvoert die de gebruiker selecteert in het gesegmenteerde besturingselement.

Hoe voeg ik de initWithFormat eraan toe: zodat deze de gekozen index weerspiegelt?

Proost

0

3 antwoord

Ten eerste zijn NSString's zo gewoon dat er een afkorting is om uw instantiances aanzienlijk te vereenvoudigen:

deviceOne = @"string01";

heeft een identiek resultaat als

deviceOne = [[NSString alloc] initWithFormat:@"string01"];

Nu weet ik niet zeker precies wat je wilt bereiken, dus ik zal een paar dingen noemen waarvan ik denk dat ze in het honkbalveld zijn.

Als u alleen een tekenreeks wilt die precies is wat wordt weergegeven op het besturingselement, gebruikt u

NSString deviceType = [_deviceSegmentCntrl titleForSegmentAtIndex:_deviceSegmentCn.selectedSegmentIndex];

Wanneer u een meer complexe reeks wilt, kunt u de klassenmethode stringWithFormat gebruiken, misschien als volgt:

NSString *deviceType = [NSString stringWithFormat:@"%@ - %@", deviceOne, [_deviceSegmentCntrl titleForSegmentAtIndex:_deviceSegmentCn.selectedSegmentIndex]];

Waar deviceOne is van uw geposte code.

2
toegevoegd
Super!!! +1 voor het advies over de string en het antwoord werkte als een charme :-)
toegevoegd de auteur Jeff Kranenburg, de bron

Het klinkt alsof je het volgende wilt:

int myIndex = _deviceSegmentCntrl.selectedSegmentIndex;
NSString *deviceType = [[NSString alloc] initWithFormat:@"%d",myIndex];

Ervan uitgaande dat uw gesegmenteerde besturingselement slechts drie opties had - deviceType zal een NSString-variabele zijn voor de reeks "0", "1" of "2" volgens de geselecteerde index.

Zorg ervoor dat u deviceType vrijgeeft wanneer u klaar bent met het gebruik ervan.

Bewerken volgens uw commentaar -

Als u de string DeviceOne in uw deviceType-tekenreeks wilt opnemen, kunt u het volgende doen:

NSString *deviceType = [[NSString alloc] initWithFormat:@"%@",deviceOne];

Als alternatief, als u de tekst van de gesegmenteerde bedieningsknop wilt die is gekozen, dan helpt het volgende u.

int myIndex = _deviceSegmentCntrl.selectedSegmentIndex;
NSString *segmentString = [_deviceSegmentCntrl titleForSegmentAtIndex:myIndex];
NSString *deviceType = [[NSString alloc] initWithFormat:@"%@",segmentString];
0
toegevoegd
Ja, dat klinkt goed, maar dit levert nog steeds het segmentnummer op in plaats van de string die ik aan het declareren ben.
toegevoegd de auteur Jeff Kranenburg, de bron
if(_deviceSegmentCntrl.selectedSegmentIndex == 0)
{
    deviceOne = [[NSString alloc] initWithFormat:@"string01"];
}
if(_deviceSegmentCntrl.selectedSegmentIndex == 1)
{
    deviceOne = [[NSString alloc] initWithFormat:@"string02"];
}
if(_deviceSegmentCntrl.selectedSegmentIndex == 2)
{
    deviceOne = [[NSString alloc] initWithFormat:@"string03"];
}

NSString *deviceType = deviceOne;

is dit wat je probeert te doen? Toon gewoon de string die je hebt gemaakt? Waarom heb je de deviceType-string zelfs nodig als dat het geval is?

0
toegevoegd