2017-05-28 16 views
2

Swiftアプリケーションを作成しましたが、実行時にウィンドウのみが表示されます。私はボタンを見ることができません。Swift Appは動作しますが、ボタンは表示されません

ここに私のコードです... .white属性を削除しようとしましたが、おそらくレイヤーの背後に隠れていたと考えています。何もない。

// 
// ViewController.swift 
// BraviaRemote 
// 
// Created by Ed Gilroy on 7/2/17. 
// Copyright © 2017 Edward Williams. All rights reserved. 
// 

import Cocoa 
import Alamofire 

class ViewController: NSViewController, NSTextFieldDelegate { 

@IBAction func MenuButton(_ sender: NSButtonCell) { 
    triggerRemoteControl(irccc: "AAAAAQAAAAEAAABgAw==") 
} 
@IBAction func ReturnButton(_ sender: NSButton) { 
    triggerRemoteControl(irccc: "AAAAAgAAAJcAAAAjAw==") 
} 
@IBAction func InfoButton(_ sender: NSButton) { 
    triggerRemoteControl(irccc: "AAAAAQAAAAEAAAA6Aw==") 
} 
@IBAction func GuideButton(_ sender: NSButton) { 
    triggerRemoteControl(irccc: "AAAAAgAAAKQAAABbAw==") 
} 
@IBAction func SelectButton(_ sender: NSButton) { 
    triggerRemoteControl(irccc: "AAAAAQAAAAEAAABlAw==") 
} 
@IBAction func ChnUpButton(_ sender: NSButton) { 
    triggerRemoteControl(irccc: "AAAAAQAAAAEAAAAQAw==") 
} 
@IBAction func ChnDownButton(_ sender: NSButton) { 
    triggerRemoteControl(irccc: "AAAAAQAAAAEAAAARAw==") 
} 
@IBAction func VolUpButton(_ sender: NSButton) { 
    triggerRemoteControl(irccc: "AAAAAQAAAAEAAAASAw==") 
} 
@IBAction func VolDownButton(_ sender: NSButton) { 
    triggerRemoteControl(irccc: "AAAAAQAAAAEAAAATAw==") 
} 
@IBAction func LeftButton(_ sender: NSButton) { 
    triggerRemoteControl(irccc: "AAAAAQAAAAEAAAA0Aw==") 
} 
@IBAction func RightButton(_ sender: NSButton) { 
    triggerRemoteControl(irccc: "AAAAAQAAAAEAAAAzAw==") 
} 
@IBAction func UpButton(_ sender: NSButton) { 
    triggerRemoteControl(irccc: "AAAAAQAAAAEAAAB0Aw==") 
} 
@IBAction func DownButton(_ sender: NSButton) { 
    triggerRemoteControl(irccc: "AAAAAQAAAAEAAAB1Aw==") 
} 
@IBAction func OnOffButton(_ sender: NSSegmentedControl){ 

} 

@IBOutlet weak var IPField: NSTextField! 

var IPAddress: String? { 
    didSet { 
     if IPField != nil { IPAddress = "http://\(IPAddress!)/sony/IRCC?" } 
     else {IPAddress = "http://192.168.2.7/sony/IRCC?"} 
     if let ip = IPAddress { print (ip) } //Unwraps optional 

    } 
} 
override func controlTextDidChange(_ obj: Notification) { 
    if let txtField = obj.object as? NSTextField { 
     if txtField.tag == 0 { 
      //Validation (for later) 
      IPAddress = txtField.stringValue 
     } 
    } 
} 


override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 

    func viewDidLoad() { 
     super.viewDidLoad() 

    } 
} 

override func viewDidAppear() { 
    // Window Properties, including solid colour, lack of resize, movable by background. 

    view.window?.titlebarAppearsTransparent = true 
    view.window?.backgroundColor = NSColor.white 
    view.window?.styleMask.remove(.resizable) 
    view.window?.isMovableByWindowBackground = true 

} 

override var representedObject: Any? { 
    didSet { 
     // Update the view, if already loaded. 
    } 
} 

struct SOAPEncoding: ParameterEncoding { 
    let service: String 
    let action: String 
    let IRCCC: String 

    func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest { 
     var urlRequest = try urlRequest.asURLRequest() 

     guard parameters != nil else { return urlRequest } 

     if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil { 
      urlRequest.setValue("text/xml", forHTTPHeaderField: "Content-Type") 
     } 

     let soapBody = "<?xml version=\"1.0\" encoding=\"utf-8\"?><s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:\(action) xmlns:u=\"\(service)\"><IRCCCode>\(IRCCC)</IRCCCode></u:X_SendIRCC></s:Body></s:Envelope>" 

     urlRequest.httpBody = soapBody.data(using: String.Encoding.utf8) 

     return urlRequest 
    } 
} 


func triggerRemoteControl(irccc: String) { 
    Alamofire.request(IPAddress!, 
         method: .post, 
         parameters: ["parameter" : "value"], 
         encoding: SOAPEncoding(service: "urn:schemas-sony-com:service:IRCC:1", 
              action: "X_SendIRCC", IRCCC: irccc)).responseString { response in 
               print(response) 
    } 
} 


} 
+3

また、Interface Builderでストーリーボードのスクリーンショットを投稿できますか? – jjs

+0

これはjjsに役立つのですか? [ストーリーボード](http://imgur.com/oWcu3mV) – yeeeeee

+0

うーん、それもうまく見える。 UI要素のない空白のウィンドウしか表示されませんか?テキストフィールドもラベルもありませんか? (ちなみに 'override func viewDidLoad()'の中には非常に疑わしいものがあります。別の入れ子の 'func viewDidLoad()'は不要ですが、おそらくこの問題を引き起こしてはいけないでしょう) – jjs

答えて

2

3つのエラー:

まず、あなたがviewDidLoad()をオーバーライドし、それを別のviewDidLoad()内部を定義しています。

あなたのコード:

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 

    func viewDidLoad() { 
     super.viewDidLoad() 

    } 
} 

はちょうどこのようになります。

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view. 
} 

第二に、あなたはviewDidAppearをオーバーライドしませんが、決してスーパーを呼んでいます。

あなたのコード:

override func viewDidAppear() { 
    // Window Properties, including solid colour, lack of resize, movable by background. 

    view.window?.titlebarAppearsTransparent = true 
    view.window?.backgroundColor = NSColor.white 
    view.window?.styleMask.remove(.resizable) 
    view.window?.isMovableByWindowBackground = true 

} 

は次のようになります。

override func viewDidAppear() { 
    super.viewDidAppear() 
    // Window Properties, including solid colour, lack of resize, movable by background. 
    view.window?.titlebarAppearsTransparent = true 
    view.window?.backgroundColor = NSColor.white 
    view.window?.styleMask.remove(.resizable) 
    view.window?.isMovableByWindowBackground = true 

} 

第三に、あなたはIPAdressdidSetをオーバーライドし、再度設定しています。これにより、無限ループが発生します。また、空であるかどうかをチェックするのではなく、NSTextField!であるため、textFieldとnilを比較します。私はあなたがここで達成しようとしていることを本当に理解することはできませんが、あなたがあなたの意図を明確に定式化できるようになるまで、この重複するナンセンスすべてを取り除くべきです。

+0

私は実際にスタックオーバーフローのユーザーや考えているユーザーから、そのナンセンスをすべて得ました。私の元のコードはうまくいっていて、IPアドレスフィールドもその迷惑メールもありませんでした。私はそれを元に戻すべきです。私が望むだけで、約1ヶ月間苦労しているのは、IPアドレスフィールドを取得することです。ユーザーはテレビのローカルIPに入力し、ソニーのirccビットでそのIPでコードを更新します。それでおしまい。 – yeeeeee

+0

私はすべてのIPを取り除いたので、[もう一度動作します](http://imgur.com/c3YdkS0)。 – yeeeeee

+0

素晴らしい!私の投稿を回答としてマークしてください。 – Oskar

関連する問題