2015-07-31 4 views
1

Im пытается программировать текстовое приключение. У меня есть NSTextView, в котором пользователь может писать команды и получать ответ, но я не могу найти способ «приостановить» функцию, ожидающую ответа пользователей.Пусть функция ждет ответа - Swift

import Cocoa 

@IBOutlet var textView: NSTextView! 

var playerName:String = "" 
var enteredString:String = "" 

//Keyboard Input 

private func returnChar(theEvent: NSEvent) -> Character?{ 
    let s: String = theEvent.characters! 
    for char in s{ 
     return char 
    } 
    return nil 
} 

override func keyUp (theEvent: NSEvent) { 
    let s: String = String(self.returnChar(theEvent)!) 
    enteredString.extend(s) 

    if theEvent.keyCode == 36 { 

     //Here I'd like to 
     //say that start() 
     //should continue 

    } 
} 

//Story 

func start() { 
    textView.string?.extend("Hi, what's your name?\n") 

    //Here I'd like to 
    //wait for the 
    //users response 

    playerName = enteredString 
    textView.string?.extend("Are you sure that I should call you \(playerName)") 

} 

Спасибо за Ваш ответ: D

ответ

1

Если вы используете Swift 2 вы можете использовать ReadLine(), который ожидает, пока пользователь нажмет не ввести в командной строке. И он возвращает String? потому что пользователь может нажать Enter, не набрав ничего.

0

Я предлагаю, чтобы ожидание ввода в NSTextView не является хорошей стратегией.

Что делать, если у вас есть метод, который знает, в каком состоянии находится ваше приложение? Затем всякий раз, когда вы получаете текст, который хотите использовать, отправьте его этому методу и дайте ему возможность решить, на основе состояния, как его использовать (имя, команда ...). Тем временем ваше приложение только что вернулось в цикл выполнения, позволяя пользователю делать то, что им нужно.

0

Добавить делегат UITextField и UITextField для ввода пользователем. Установите делегат UITextField для себя и добавьте метод: «textFieldShouldReturn».

В этом методе обрабатывается логика всякий раз, когда пользователь вводит материал. Вот небольшой фрагмент:

import UIKit 

class ViewController: UIViewController, UITextFieldDelegate { 

    var userInputTextField: UITextField? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     userInputTextField = UITextField(frame: CGRectMake(0, 100, view.frame.width, 100)) 
     userInputTextField?.delegate = self 
     userInputTextField?.returnKeyType = UIReturnKeyType.Done 
     view.addSubview(userInputTextField!) 
    } 

    func textFieldShouldReturn(textField: UITextField) -> Bool { 
     println(textField.text) 
     return true 
    } 
} 
Смежные вопросы