2015-02-23 2 views
0

Оповещение нового пользователя! :) В моем приложении есть несколько просмотров, все они настроены в панели рассказов, и у всех есть свои классы подкласса UIView со своими собственными перезаписанными методами drawRect. Один из них работает как кнопка и способна перекроить себя через setneedsdisplay и вызывает функцию другого класса UIViews:UIViews SetNeedsDisplay не называется

import UIKit 

class Button: UIView { 
override func touchesEnded(touches: NSSet, withEvent event: UIEvent) { 
    super.touchesEnded(touches, withEvent: event) 
    let touchPoint: CGPoint! = touches.anyObject()?.locationInView(self) 
    if butouched == true{ 
     if touchPoint.x > bounds.size.width - bounds.size.height && touchPoint.x < bounds.size.width && touchPoint.y > 0 && touchPoint.y < bounds.size.height{ 
      counter++ 
      setNeedsDisplay() //thats the setNeedsDisplay that works 
      DrawGraph().updateModell() 
     } 
    } 
} 

Проблема теперь, что setNeedsDisplay в этой функции не работают, даже несмотря на то, updateModell -функция называется:

import UIKit 

class DrawGraph: UIView { 
func updateModell() { 
    setNeedsDisplay() // thats the setNeedsDisplay that doesn't work 
} 

Так что я googled и googled, но просто не могу понять, что не так. И да, это моя первая неделя с Свифт и прошивкой ...

ответ

0

Создать выход для между видом на раскадровку и DrawGraph, предположим, что вы называете его DrawGraphV, убедитесь, что точка зрения пользовательского класса DrawGraph, вам не нужен метод updateModell, просто позвоните прямо DrawGraphV.SetNeedsDisplay

+1

Хотя ядро ​​вашего ответа верное, для кого-то неясно, как OP не знакомы с языком программирования, пожалуйста, включите пример кода, если это возможно, чтобы сделать ваш ответ более ясным. – milo526

+0

Эй, эй, ОП не так уж незнакомо с языком программирования;) не более –

0

Вот ваш призыв к updateModell:

DrawGraph().updateModell() 

Эта строка создает новый экземпляр из DrawGraph и посылает ему updateModell сообщений. Этот новый экземпляр DrawGraph не находится в вашей иерархии. Он отделен от любых других экземпляров DrawGraph. Поскольку ничто не ссылается на этот новый экземпляр DrawGraph, этот экземпляр удаляется сразу после возврата updateModell. Теперь вы понимаете, почему этот вызов updateModell не влияет на экран?

Я не знаю, почему вы решили попытаться реализовать свой собственный класс Button. Есть ли причина, по которой вам не нравится UIButton?

Обычный способ реализовать это должен был бы разместить свойство counter в вашем контроллере вида (или в объекте модели, на который ссылается ваш контроллер вида). Контроллер представления также имеет ссылки на кнопку и существующие DrawGraph. Подключите событие «Touches Ended» кнопки к методу IBAction в контроллере представления. В методе IBAction обновите счетчик, обновите ярлык кнопки (или что-то еще) и отправьте updateModell в существующий экземпляр DrawGraph.

+0

Спасибо ! Что я особенно понимаю сейчас, так это то, что я очень мало понимаю, я просто дизайнер, которому было сказано, что программирование не так уж сложно;) –

+0

Но, может быть, вы можете сказать мне, как отправить updateModell в существующий экземпляр DrawGraph? –

+0

Не могу сказать, потому что это очень специфично для того, как написано ваше приложение. Похоже, вам нужно проработать больше учебников, чтобы изучить основные понятия объектно-ориентированного программирования и программирования iOS. –

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

  • Нет связанных вопросов^_^