Swift 如何在自定义类中使用presentViewController?
我只是更新了代码,但alertWindow不会显示。 我在Xcode中添加了断点,它显示Swift 如何在自定义类中使用presentViewController?,swift,delegates,ios-multithreading,Swift,Delegates,Ios Multithreading,我只是更新了代码,但alertWindow不会显示。 我在Xcode中添加了断点,它显示viewDelegate为nil。 所有代表均为零。 这是我的代码: class LoginViewController:UIViewController,AlertDelegate { override func viewDidLoad() { super.viewDidLoad() let BackGroundImage:UIImageView = UIImageView(frame:
viewDelegate
为nil。
所有代表均为零。
这是我的代码:
class LoginViewController:UIViewController,AlertDelegate
{
override func viewDidLoad() {
super.viewDidLoad()
let BackGroundImage:UIImageView = UIImageView(frame: CGRectMake(0, 0, self.view.frame.width , self.view.frame.height))
let image: UIImage = UIImage(named: "backgroundLogin.jpg")!
BackGroundImage.image = image
self.view.addSubview(BackGroundImage)
//self.view.backgroundColor = UIColor(patternImage: UIImage(named: "backgroundLogin.jpg")!)
username.text = "User name"
password.text = "Password"
usernameWarning.text = ""
passwordWarning.text = ""
self.view.bringSubviewToFront(username)
self.view.bringSubviewToFront(password)
self.view.bringSubviewToFront(usernameText)
self.view.bringSubviewToFront(passwordText)
self.view.bringSubviewToFront(LoginButton)
self.view.bringSubviewToFront(RegisterButton)
self.view.bringSubviewToFront(usernameWarning)
self.view.bringSubviewToFront(passwordWarning)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
switch segue.identifier
{
case .Some("RegisterSegue"):
let registerViewController = segue.destinationViewController as! RegisterViewController
if let temp_register_username = usernameText!.text
{
registerViewController.register_name = temp_register_username
if let temp_register_pass = passwordText!.text
{
registerViewController.register_password = temp_register_pass
}
}
case .Some("loginSegue"):
let loginViewController = segue.destinationViewController as! FunctionsViewController
loginViewController.client = client
default:
super.prepareForSegue(segue, sender: sender)
}
}
override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool {
if identifier == "loginSegue"
{
if usernameText.text != ""
{
if passwordText.text != ""
{
let encrypt = encryptMsg(send: passwordText.text!)
let encrypt_pass = encrypt.encryptSendMsg()
let sendMsg = AppConfig.AddHead("login", body: usernameText.text!+"|"+encrypt_pass)
let (_,_) = client.connect(timeout: 1)
let (success,_) = client.send(str: sendMsg)
if success
{
let data = client.read(1024*10)
if let d = data
{
if let str = String(bytes: d, encoding: NSUTF8StringEncoding)
{
if str[0...2] == AppConfig.TransmissionAgreementConfiguration["successLogin"]
{
AppConfig.StoreUserID(str)
let defaults = NSUserDefaults()
defaults.setObject(usernameText.text!, forKey: "userName")
let acceptThread = AcceptThread()
acceptThread.start()
return true
}
else if str[0...2] == AppConfig.TransmissionAgreementConfiguration["errLoginUsernameNotExist"]
{
usernameWarning.text = "User name doesn't exist"
usernameWarning.reloadInputViews()
passwordWarning.text = ""
passwordWarning.reloadInputViews()
return false
}
else if str[0...2] == AppConfig.TransmissionAgreementConfiguration["errLoginUsernameAlreadyOnline"]
{
usernameWarning.text = "User account already be online"
usernameWarning.reloadInputViews()
passwordWarning.text = ""
passwordWarning.reloadInputViews()
return false
}
else if str[0...2] == AppConfig.TransmissionAgreementConfiguration["errLoginPassword"]
{
usernameWarning.text = ""
usernameWarning.reloadInputViews()
passwordWarning.text = "Password Incorrect"
passwordWarning.reloadInputViews()
return false
}
}
}
}
return false
}
else
{
usernameWarning.text = ""
usernameWarning.reloadInputViews()
passwordWarning.text = "password cannot be empty"
passwordWarning.reloadInputViews()
return false
}
}
else
{
usernameWarning.text = "username cannot be empty"
usernameWarning.reloadInputViews()
return false
}
}
else
{
return true
}
}
func presentWindow(title:String,msg:String)
{
let alertController = UIAlertController(title: "\(title):", message: "\(msg)", preferredStyle: UIAlertControllerStyle.Alert)
alertController.addTextFieldWithConfigurationHandler{
(textField: UITextField!) -> Void in
textField.placeholder = "Message"
}
let cancelAction = UIAlertAction(title: "Ignore", style: UIAlertActionStyle.Cancel, handler: nil)
let okAction = UIAlertAction(title: "Reply", style: UIAlertActionStyle.Default,
handler: {
action in
let reply_msg = alertController.textFields!.first! as UITextField
print("I replies \(reply_msg)")
})
alertController.addAction(cancelAction)
alertController.addAction(okAction)
self.presentViewController(alertController, animated: true, completion: nil)
}
@IBAction func logoutUnwindSegue(segue: UIStoryboardSegue) {
// Intentionally left blank
}
var client:TCPClient = TCPClient(addr:"localhost",port:8889)
var AppConfig=TransmissionAgreement(first:"test")
@IBOutlet weak var usernameWarning: UILabel!
@IBOutlet weak var passwordWarning: UILabel!
@IBOutlet weak var username: UILabel!
@IBOutlet weak var password: UILabel!
@IBOutlet weak var usernameText: UITextField!
@IBOutlet weak var passwordText: UITextField!
@IBOutlet weak var LoginButton: UIButton!
@IBOutlet weak var RegisterButton: UIButton!
}
class AcceptThread: NSThread {
override func main() {
let server:TCPServer = TCPServer(addr:"127.0.0.1",port: 7000)
let (success,_) = server.listen()
if success
{
while !cancelled
{
if let my_client = server.accept()
{
let clientReadThread = ClientReadThread(client: my_client)
clientReadThread.start()
clientThreads.append(clientReadThread)
}
}
for clientThread in clientThreads {
clientThread.cancel()
}
}
}
var clientThreads = Array<ClientReadThread>()
var AppConfig=TransmissionAgreement(first:"test")
}
@objc protocol AlertDelegate: class {
func presentWindow(title:String,msg:String)
}
@objc protocol ClientReadThreadDelegate: class {
func clientReadThread(clientReadThread: ClientReadThread, didReceiveMessage message: String)
}
class ClientReadThread:NSThread{
init(client: TCPClient) {
self.client = client
super.init()
}
override func main() {
while !cancelled, let readValue = client.read(1024*10) {
if let message = String(bytes: readValue, encoding: NSUTF8StringEncoding) {
let head = message[0...2]
// print("head is \(head)")
if head! == AppConfig.TransmissionAgreementConfiguration["add"]
{
let defaults = NSUserDefaults()
let myname = defaults.stringForKey("userName")
//store data
let context = CoreDataService.sharedCoreDataService.mainQueueContext
let friend = NSEntityDescription.insertNewObjectForNamedEntity(Friends.self, inManagedObjectContext: context)
friend.name = message.substringFromIndex(3)
try! context.save()
let sendMsg = AppConfig.AddClientHead("agreeAdd", body:myname)
let (_,_) = client.send(str:sendMsg)
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.delegate?.clientReadThread(self, didReceiveMessage: message)
})
}
else if head! == AppConfig.TransmissionAgreementConfiguration["chat"]
{
let search = message.substringFromIndex(3)
let resultController = try? catFriend.sharedCatFriendsService.catBlack(search)
try! resultController!.performFetch()
let flag = resultController?.sections?.count
if flag <= 1//friend
{
dispatch_async(dispatch_get_main_queue(), { () -> Void in
let client_info = message.split("|")
let client_name = client_info[1]
//self.alertDelegate?.presentWindow(client_name, msg: client_info[2])
self.viewDelegate?.presentWindow(client_name, msg: client_info[2])
})
}
else//black, not show the meg
{
//do nothing
}
}
}
}
}
var AppConfig=TransmissionAgreement(first:"test")
let client: TCPClient
var viewDelegate:LoginViewController?
var delegate: ClientReadThreadDelegate?
var alertDelegate: AlertDelegate?
private var resultController: NSFetchedResultsController?
}
类LoginViewController:UIViewController,AlertDelegate
{
重写func viewDidLoad(){
super.viewDidLoad()
let BackGroundImage:UIImageView=UIImageView(帧:CGRectMake(0,0,self.view.frame.width,self.view.frame.height))
让image:UIImage=UIImage(名为:“backgroundLogin.jpg”)!
BackGroundImage.image=image
self.view.addSubview(背景图像)
//self.view.backgroundColor=UIColor(patternImage:UIImage(名为:“backgroundLogin.jpg”)!)
username.text=“用户名”
password.text=“password”
usernameWarning.text=“”
passwordWarning.text=“”
self.view.bringSubviewToFront(用户名)
self.view.bringSubviewToFront(密码)
self.view.bringSubviewToFront(用户名文本)
self.view.bringSubviewToFront(密码文本)
self.view.bringSubviewToFront(登录按钮)
self.view.bringSubviewToFront(注册表按钮)
self.view.bringSubviewToFront(用户名警告)
self.view.bringSubviewToFront(密码警告)
}
覆盖函数prepareforsgue(segue:UIStoryboardSegue,sender:AnyObject?){
开关序列标识符
{
案例部分(“注册者段”):
让registerViewController=segue.destinationViewController为!registerViewController
如果让临时注册用户名=usernameText!.text
{
registerViewController.register\u name=temp\u register\u用户名
如果让temp\u register\u pass=passwordText!.text
{
registerViewController.register\u password=temp\u register\u pass
}
}
案例部分(“登录格”):
让loginViewController=segue.destinationViewController作为!函数ViewController
loginViewController.client=客户端
违约:
super.prepareForSegue(segue,发送方:发送方)
}
}
重写func shouldPerformSegueWithIdentifier(标识符:字符串,发送方:AnyObject?)->Bool{
如果标识符==“loginSegue”
{
如果usernameText.text!“”
{
如果passwordText.text!“”
{
让encrypt=encryptMsg(发送:passwordText.text!)
让encrypt_pass=encrypt.encryptSendMsg()
让sendMsg=AppConfig.AddHead(“登录”,正文:usernameText.text!+“|”+加密传递)
let(,)=client.connect(超时:1)
let(success,u)=client.send(str:sendMsg)
如果成功
{
让data=client.read(1024*10)
如果设d=数据
{
如果let str=String(字节:d,编码:NSUTF8StringEncoding)
{
如果str[0…2]==AppConfig.TransmissionAgreementConfiguration[“successLogin”]
{
AppConfig.StoreUserID(str)
let defaults=NSUserDefaults()
defaults.setObject(usernameText.text!,forKey:“userName”)
让acceptThread=acceptThread()
acceptThread.start()
返回真值
}
如果str[0…2]==AppConfig.TransmissionAgreementConfiguration[“errLoginUsernameNotExist”]
{
usernameWarning.text=“用户名不存在”
usernameWarning.reloadInputViews()
passwordWarning.text=“”
passwordWarning.reloadInputViews()
返回错误
}
如果str[0…2]==AppConfig.TransmissionAgreementConfiguration[“errLoginUsernameAlreadyOnline”]
{
usernameWarning.text=“用户帐户已联机”
usernameWarning.reloadInputViews()
passwordWarning.text=“”
passwordWarning.reloadInputViews()
返回错误
}
如果str[0…2]==AppConfig.TransmissionAgreementConfiguration[“errLoginPassword”]
{
usernameWarning.text=“”
usernameWarning.reloadInputViews()
passwordWarning.text=“密码不正确”
passwordWarning.reloadInputViews()
返回错误
}
}
}
}
返回错误
}
其他的
{
usernameWarning.text=“”
usernameWarning.reloadInputViews()
passwordWarning.text=“密码不能为空”
passwordWarning.reloadInputViews()
返回错误
}
}
其他的
{
usernameWarning.text=“用户名不能为空”
usernameWarning.reloadInputViews()
返回错误
}
}
其他的
{
返回真值
}
}
func presentWindow(标题:字符串,消息:字符串)
{
让alertController=UIAlertController(标题:“\(标题):”,消息:“\(消息)”,首选样式:UIAlertControllerStyle.Alert)
alertController.addTextFieldWithConfigurationHandler{
(textField:UITextField!)->中的Void
textField.placeholder=“消息”
}
让cancelAction=UIAlertAction(标题:“忽略”,样式:UIAlertActionStyle.Cancel,处理程序:nil)
让okAction=UIAlertAction(标题
class MyViewController : UIViewController, AlertDelegate {
private var clientReadThread: ClientReadThread?
override viewDidLoad() {
super.viewDidLoad();
clientReadThread = ClientReadThread(someTcpClient)
clientReadThread.viewDelegate = self
}
func presentWindow(title:String,msg:String) {
// Your code goes here.
}
}