2017-02-11 61 views
0

我有一個文本字段,並使用numberOfRowsInSection創建超過50個文本字段。之後,我使用if else條件,但這很耗時且冗長的方法,所以我想減少我的if else條件。我不想使用開關條件。我該怎麼辦?我有很多如果其他條件如何減少它們

if (textField.tag == 0)//cust add line 1 
{ 
    [_customerFormTableView setContentOffset : CGPointMake(0, 0)]; 
} 
else if (textField.tag == 1)//cust add line 2 
{ 
    [_customerFormTableView setContentOffset : CGPointMake(0, 0)]; 
} 

else if (textField.tag == 2)//kyc line 1 
{ 
    [_customerFormTableView setContentOffset : CGPointMake(0, 50)]; 
} 
else if (textField.tag == 3)// kyc line 2 
{ 

    [self.view endEditing : YES]; 

    DatePickerViewController *dateViewContrl = [self.storyboard instantiateViewControllerWithIdentifier : @"DatePickerViewController"]; 

    dateViewContrl.delegate = self; 

    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) 
    { 
     //dateViewContrl.preferredContentSize=CGSizeMake(325, 200); 
     dateViewContrl.preferredContentSize = CGSizeMake(290, 200); 
    } 

    popcontrol = [[WYPopoverController alloc] initWithContentViewController:dateViewContrl]; 
    [popcontrol.delegate self]; 

    //  _currentfield=_dateTextField; 
    NSLog(@"%f %f",popcontrol.popoverContentSize.height,popcontrol.popoverContentSize.height); 
     CGRect rect_ = [self.view convertRect : textField.frame fromView : textField.superview]; 
    [popcontrol presentPopoverFromRect : rect_ 
     inView : self.view 
     permittedArrowDirections : WYPopoverArrowDirectionAny 
     animated : YES 
     options : WYPopoverAnimationOptionScale]; 

    return NO; 
} 
else if (textField.tag == 4) 
{ 
    [textField resignFirstResponder]; 
    [self DropDownGendview : textField]; 
    return NO; 
} 
else if (textField.tag == 5) 
{ 
    [_customerFormTableView setContentOffset : CGPointMake(0, 250)]; 
} 
else if (textField.tag == 6) 
{ 
    [_customerFormTableView setContentOffset : CGPointMake(0, 310)]; 
} 
else if (textField.tag == 7) 
{ 
    [_customerFormTableView setContentOffset : CGPointMake(0, 370)]; 
} 
else if (textField.tag == 8 || textField.tag == 13 || textField.tag == 20) 
{ 
    [self.view endEditing : YES]; 
    [self DropDownview : textField]; 
    return NO; 
} 
else if (textField.tag == 9) 
{ 
    [_customerFormTableView setContentOffset : CGPointMake(0, 510)]; 
} 
else if (textField.tag == 10)//cor email 
{ 
    [_customerFormTableView setContentOffset : CGPointMake(0, 630)]; 
} 
else if (textField.tag == 11)//desig 
{ 
    [_customerFormTableView setContentOffset : CGPointMake(0, 700)]; 
} 
else if (textField.tag == 12)//level 
{ 
    [_customerFormTableView setContentOffset : CGPointMake(0, 770)]; 
} 
else if (textField.tag == 14)//level 
{ 
    [_customerFormTableView setContentOffset : CGPointMake(0, 910)]; 
} 
else if (textField.tag == 15)//level 
{ 
    [_customerFormTableView setContentOffset : CGPointMake(0, 980)]; 
} 
else if (textField.tag == 16) 
{ 
    [_customerFormTableView setContentOffset : CGPointMake(0, 1050)]; 
} 
else if (textField.tag == 17) 
{ 
    [_customerFormTableView setContentOffset : CGPointMake(0, 1140)]; 
} 
else if (textField.tag == 18) 
{ 
    [_customerFormTableView setContentOffset : CGPointMake(0, 1240)]; 
} 
else if (textField.tag == 19) 
{ 
    [_customerFormTableView setContentOffset : CGPointMake(0, 1310)]; 
} 
else if (textField.tag == 21) 
{ 
    NSLog(@"state dropdown %ld",(long)textField.tag); 
} 
else if (textField.tag == 22) 
{ 
    [_customerFormTableView setContentOffset : CGPointMake(0, 1520)]; 
} 
else if (textField.tag == 23) 
{ 
    [_customerFormTableView setContentOffset : CGPointMake(0, 1590)]; 
} 
else if (textField.tag == 24) 
{ 
    [_customerFormTableView setContentOffset : CGPointMake(0, 1660)]; 
} 
else if (textField.tag == 25) 
{ 
    [_customerFormTableView setContentOffset : CGPointMake(0, 1730)]; 
} 
else if (textField.tag == 26) 
{ 
    [self.view endEditing : YES]; 
    [self dropDownPurposeView : textField]; 
    return NO; 
} 
+0

顯然有太多的魔法數字。但是,例如,對於標籤10,11和12,該點的y是630 +((標籤-10)* 70),並且還有其他類似性。但是我認爲,如果/優化,你更多地考慮謊言而不是你。 – Larme

回答

0

你可以用開關的情況下statement.It嘗試是更好的一個,而不必大量的if else condition.If您使用SWIT情況下,它會提高你的表現,而不是如果else條件有多個。

switch語句允許測試變量與值列表的相等性。每個值被稱爲一個情況下,和該變量上檢查每個被切換切換

 switch(expression){ 
       case constant-expression : 
        statement(s); 
        break; /* optional */ 
       case constant-expression : 
        statement(s); 
        break; /* optional */ 

      /* you can have any number of case statements */ 
       default : /* Optional */ 
       statement(s); 
      } 

通常在switch語句中使用的表達式必須具有整體或枚舉類型或者是類型的,其中,類有一個單一的轉換函數爲整型或枚舉類型。

有關詳細信息與此https://www.tutorialspoint.com/objective_c/switch_statement_in_objective_c.htm

+0

但在這我必須檢查每個文本字段標記,我不想要這個。我已經在上面提到過了 –

+1

@VijendraYadav不,你不需要爲每個要檢查的標記和其他標記實現一個'case' 'default'語句將被執行。 'default'語句可以不是什麼。在你的代碼中不是'case 13'。 – Willeke

+0

我知道如何使用開關,但我想要新的邏輯,以減少這樣一個冗長的代碼。我知道開關比其他的更快,但是當我使用開關時,我必須檢查每個標籤的情況下,所以我期待任何新的 –

1

去你能代表很多這些如果報表數據,採用了結構:

typedef struct 
{ 
    int tag; 
    int pointX; 
    int pointY; 
} Values; 

const Values values[] = { 
    {0, 0, 0}, 
    {1, 0, 0}, 
    {2, 0, 50}, 
    // etc 
}; 

然後通過迭代,如果確定您的標籤在裏面:

int i; 
bool found = false; 

for (i = 0; i < sizeof(values)/sizeof(values[0]); i++) 
{ 
    if (values[i].tag == textField.tag) 
    { 
     [_customerFormTableView setContentOffset: CGPointMake(values[i].pointX, 
                   values[i].pointY)]; 
     found = true; 
     break; 
    } 
} 

if (! found) 
{ 
     // do more complicated operations here 
} 

你可以加快聲明與二進制搜索,如果標籤排序。

+0

const值的值是什麼意思是這個 –

+0

這意味着values []數組內的數據是不可改變的 - 它是常數 –