2015-11-18 2 views
1

Я сделал игру tic tac toe в swift .. игра закончена, я застрял на последнем бите, когда пользователь нажимает кнопку повтора воспроизведения. Я хочу установить все кнопки обращается к нулю, чтобы пользователь снова начал играть в игру. Я использовал свойство тега, чтобы вернуть его в нуль. я кодируются следующим образом:не может отличить значение UIView от UIButton

for i = 0 ; i < 8 ; i++ { 
    var button = view.viewWithTag[i] as! UIButton 
    button.setImage(nil, forState:.normal) 
} 

но дает ошибку

не может ввергнуть значение типа UIView в UIButton

ответ

1

должно быть viewWithTag (я) не viewWithTag [I]

3

Используйте этот кронштейн () вместо [] в viewWithTag.

for i = 0 ; i < 8 ; i++ { 

     var button = view.viewWithTag(i) as! UIButton 
     button.setImage(nil, forState:.normal) 

    } 

Еще одна вещь, которую вы должны помнить каждый подвид в XIb имеют тег 0 (ByDefault), поэтому вы должны назначить его от 1 до вашей кнопки и начать свой цикл от I = 1.

5

вы должны проверить, если тег сконфигурирован правого

for var i = 0 ; i < 8 ; i++ { 
     let subview = view.viewWithTag(i) 
     if subview?.isKindOfClass(UIButton) == true{ 
      let button = subview as! UIButton 
      button.setImage(nil, forState:UIControlState.Normal) 
     }else{ 
      print("Tag \(i) is not configured right") 
     } 
    } 

Кроме того, как @Dharmbir Чудхарьте сказал

Если вы используете тег в Г t, не начинаются с 0, потому что по умолчанию тег 0 легко испортить.

+0

Вы скопировали мою последнюю строку :) –

+0

Извините, не видел вас слов, я обновлю, чтобы отметить, что вы сказали это сначала – Leo

0

Это эта путаница происходит из-за в вашем экране есть и другие элементы управления, которые также имеют тег = 0 из-за какого-либо контроля вы положили на экране, это по умолчанию тега 0.

Итак, есть два решения для этой проблемы:

  1. изменения других элементов управления теге ненулевым означает какое-либо значение тега больше 0, но не в 0 до 8.
  2. Или изменить кнопку тег с 10 до 17, а не от 0 до 7

Используйте ниже код для варианта 1:

for var i:Int = 0 ; i < 8 ; i++ { 
    let button = view.viewWithTag(i) as! UIButton 
    button.setImage(UIImage(), forState: UIControlState.Normal) 
} 

и использовать ниже код для варианта 2:

for var i:Int = 10 ; i < 11 ; i++ { 
    let button = view.viewWithTag(i) as! UIButton 
    button.setImage(UIImage(), forState: UIControlState.Normal) 
} 
+1

Я уже позаботился об этой проблеме. –

0

сделать это;

for i = 0 ; i < 8 ; i++ { 
    if let button:UIButton = view.viewWithTag(i) as? UIButton { 
    button.setImage(nil, forState:.normal) 
    } 
} 

Примечание: Убедитесь, что нет какого-либо другой вид не имеет тега 0 до 8.

0

Вашего кода все в порядке. Вероятно, проблема заключается в том, что swift находит что-то еще с нулевым тегом, который не может быть преобразован в кнопку, прежде чем он найдет первую кнопку. Я бы посоветовал вам перейти на раскадровку и, в свою очередь, переместить кнопку нулевого тега выше всех остальных кнопок. Это позволит быстро найти нулевую тег. Надеюсь, это поможет!:)

Смежные вопросы