2016-12-29 1 views
-4

Возможно ли передавать данные между UIViewController и UIView? если да, как?Возможно ли передавать данные между UIViewController и UIView с помощью swift?

Например, когда вы нажимаете кнопку1, UIViewController говорит UIView, что человек нажал кнопку1, а затем UIView рисует треугольник. Но если вы затем нажмете кнопку 2, UIViewController сообщит UIView, что теперь он нажал кнопку2, а затем UIView устраняет треугольник и рисует круг.

Кнопки программируются программно.

Вопрос в том, как я могу вызвать фигуры, которые я нарисовал с помощью drawRect в UIView в UIViewController.

class ViewController: UIViewController { 
    @IBOutlet var UnitViewTabeller: UnitView! 
    var btn: UIButton! 

    override viewDidLoad { 
    self.btn = UIButton(frame: CGRectMake(0.04 * view.bounds.width, 0.91 * view.bounds.height, 0.44 * view.bounds.width, 0.07 * view.bounds.height)) //set frame 
      self.btn.layer.cornerRadius = 10 
      self.btn.setTitle("0", forState: .Normal) //set button title 
      self.btn.setTitleColor(UIColor.whiteColor(), forState: .Normal) //set button title color 
      self.btn.backgroundColor = UIColor(red: 0.2745, green: 0.2784, blue: 0.2706, alpha: 1.0) //set button background color 
      self.btn.tag = 0 // set button tag 
      self.btn.addTarget(self, action: "btnclicked:", forControlEvents: .TouchUpInside) //add button action 
      self.view.addSubview(btn) //add button in view 
      self.btnArray.append(btw) 
    } 

    func btnclicked(sender: UIButton) { 
     //draw the circle from the UIView 
    } 


}  
    class UnitView: UIView { 

    override func drawRect(rect: CGRect) { 
     let cirkel = UIGraphicsGetCurrentContext() 
     let rectangle = CGRect(x: 0.2 * bounds.width, y: 0.15 * bounds.height, width: 0.6 * bounds.width, height: 0.6 * bounds.width) 
     CGContextSetLineWidth(cirkel, 4.0) 
     CGContextAddEllipseInRect(cirkel, rectangle) 
     CGContextStrokePath(cirkel) 
    } 
} 
+7

да, возможно. – luk2302

+0

", а затем' UIView' нарисуйте треугольник "... Если вы хотите, вы можете нарисовать материал UIView', но использование' CAShapeLayer' - это более простой способ включить фигуры в представление. – Rob

+0

Причина моего голосования. Пожалуйста, изучите аббревиатуру MVC. Model-View-Controller. Может потребоваться всего лишь мгновение, чтобы закрепить это в Google, но после часа исследований о доходах? Вы дадите себе НЕСКОЛЬКО шагов в своей карьере. (Я говорю это с полным уважением к тому, что вы уже знаете, но также признавая то, что вам пока еще не удавалось. Удачи!) Если вы понимаете MVC, вы должны уже знать не только о том, что «передача данных» между контроллером и взгляд - это то, о чем идет речь, но также и то, что некоторые вещи - это то, о чем речь не идет. – dfd

ответ

-2

UIViewController имеет view свойство типа UIView.

Вы можете получить доступ внутри вашего класса UIViewController с помощью self.view

Доступ к его внутри своего класса:

class MyViewController: UIViewController { 
    var buttonLabel:String 
    var buttonRadius:CGFloat = 90 
    var button = UIButton.buttonWithType(UIButtonType.System) as UIButton 

    init(buttonColour:CGColorRef, buttonLabel:String){ 
    self.buttonColour = buttonColour 
    self.buttonLabel = buttonLabel 
    } 

    func drawButton() { 
    button.frame = 100, 100, buttonRadius * 2, buttonRadius * 2) 
    button.layer.borderColor = buttonColour 
    button.setTitle(buttonLabel, forState: UIControlState.Normal) 
    button.addTarget(self, action: "pressed:", forControlEvents: UIControlEvents.TouchUpInside) 
    self.view.addSubview(button) 
    } 
} 

Swift class doesn't like self.view.addSubview()

+0

Этот ответ не имеет никакого отношения к вопросу. – rmaddy

+0

Вопрос о доступе к 'UIView' из' UIViewController.' Что я пропустил? – Alan

+0

Вы пропустили вопрос о отправке сообщения в пользовательский вид, в котором сообщается, чтобы он рисовал другую форму, на основе которой была нажата кнопка. – rmaddy

0

Добро пожаловать на SO.

Это довольно простой вопрос начинающего.

Уверен, это возможно. Вероятно, вы должны создать собственный подкласс UIView. Назовем это ShapeView. Дайте ему способы рисовать различные фигуры и дайте им свойства сохранить текущее состояние.

Теперь вы можете добавить UIView к контроллеру своего вида и зайти в «инспектор идентичности» для вашей сцены контроллера вида и изменить тип этого вида на новый класс ShapeView. Добавьте выход в форму в виде контроллера.

Поскольку ваш вид формы является пользовательским подклассом UIView с пользовательскими методами и свойствами, ваш контроллер представления может вызывать эти методы и устанавливать эти свойства по мере необходимости.

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