user interfaces - lecture 18 cocoa: multiple windows · 2018. 9. 14. · nswindowcontroller (or its...
TRANSCRIPT
![Page 2: User Interfaces - Lecture 18 Cocoa: Multiple windows · 2018. 9. 14. · NSWindowController (or its subclass) and associate it with a NIB file I Window method of NSWindowController](https://reader036.vdocuments.us/reader036/viewer/2022071009/5fc76ea635059622f15853cb/html5/thumbnails/2.jpg)
Assignment
let bundlePath = Bundle.main.resourcePathoutletImage.image=NSImage(contentsOfFile:bundlePath!+"/test.png")if let filepath = Bundle.main.path(forResource: "readme",ofType: "txt"){do {let contents = try String(contentsOfFile: filepath)outletTextView.string = contents;outletTextView.isEditable = false ;} catch {// contents could not be loaded }} else {print ("else");}
1
Hamza Bennani -*- COSC346 -*- Cocoa: Multiple windows -*- September 13, 2018
![Page 3: User Interfaces - Lecture 18 Cocoa: Multiple windows · 2018. 9. 14. · NSWindowController (or its subclass) and associate it with a NIB file I Window method of NSWindowController](https://reader036.vdocuments.us/reader036/viewer/2022071009/5fc76ea635059622f15853cb/html5/thumbnails/3.jpg)
Assignment
let fileURL = NSURL(fileURLWithPath:bundlePath!+"/test.mov");playView = AVPlayer(url: fileURL as URL);outletVideo.player = playView ;print("video")do {soundPlayer = try AVAudioPlayer(contentsOf:URL.init(fileURLWithPath:Bundle.main.path(forResource: "test", ofType: "m4a")!))soundPlayer.prepareToPlay();print("playing")} catch {}outletscroll.isHidden=true; outletVideo.isHidden=true;outletImage.isHidden = true;
2
Hamza Bennani -*- COSC346 -*- Cocoa: Multiple windows -*- September 13, 2018
![Page 4: User Interfaces - Lecture 18 Cocoa: Multiple windows · 2018. 9. 14. · NSWindowController (or its subclass) and associate it with a NIB file I Window method of NSWindowController](https://reader036.vdocuments.us/reader036/viewer/2022071009/5fc76ea635059622f15853cb/html5/thumbnails/4.jpg)
Last LectureSummary
I WindowI NSWindowI Window DelegateI Views, content view, custom viewsI NSViewI View hierarchyI View geometry
3
Hamza Bennani -*- COSC346 -*- Cocoa: Multiple windows -*- September 13, 2018
![Page 5: User Interfaces - Lecture 18 Cocoa: Multiple windows · 2018. 9. 14. · NSWindowController (or its subclass) and associate it with a NIB file I Window method of NSWindowController](https://reader036.vdocuments.us/reader036/viewer/2022071009/5fc76ea635059622f15853cb/html5/thumbnails/5.jpg)
Window Controller
I The behaviour of each window is controlled by anNSWindowController object
I To create a new window, create a new class that extends(abstract) NSWindowController
I When creating new "Cocoa Class" in Xcode, if you indicatethat you are extending
I NSWindowController, Xcode will provide you with an optionto create a new XIB file
4
Hamza Bennani -*- COSC346 -*- Cocoa: Multiple windows -*- September 13, 2018
![Page 6: User Interfaces - Lecture 18 Cocoa: Multiple windows · 2018. 9. 14. · NSWindowController (or its subclass) and associate it with a NIB file I Window method of NSWindowController](https://reader036.vdocuments.us/reader036/viewer/2022071009/5fc76ea635059622f15853cb/html5/thumbnails/6.jpg)
NSWindowController
I NSWindowController object contains methods for loadingand closing of the associated window
let newWinContrl = NSWindowController(windowNibName:NSNib.Name(rawValue: "TimerWindowController"))newWinContrl.showWindow(self)
I To create a new window, you allocate a new instance ofNSWindowController (or its subclass) and associate it witha NIB file
I Window method of NSWindowController returns referenceto the NSWindow object associated with the controller
5
Hamza Bennani -*- COSC346 -*- Cocoa: Multiple windows -*- September 13, 2018
![Page 7: User Interfaces - Lecture 18 Cocoa: Multiple windows · 2018. 9. 14. · NSWindowController (or its subclass) and associate it with a NIB file I Window method of NSWindowController](https://reader036.vdocuments.us/reader036/viewer/2022071009/5fc76ea635059622f15853cb/html5/thumbnails/7.jpg)
Custom Controller
I It is common to create a custom controller that extendsNSWindowController
I You can override certain methods to customise controllerbehaviour
I windowWillLoad - invoked just before window is loadedI windowDidLoad - invoked after window is loaded
I It is common to implement the window delegate methods inthis custom controller, and make the controller the window’sdelegate
I When building a single-window application, the abstractionthat NSWindowController provides is less important
6
Hamza Bennani -*- COSC346 -*- Cocoa: Multiple windows -*- September 13, 2018
![Page 8: User Interfaces - Lecture 18 Cocoa: Multiple windows · 2018. 9. 14. · NSWindowController (or its subclass) and associate it with a NIB file I Window method of NSWindowController](https://reader036.vdocuments.us/reader036/viewer/2022071009/5fc76ea635059622f15853cb/html5/thumbnails/8.jpg)
ApplicationWindow Controller
7
Hamza Bennani -*- COSC346 -*- Cocoa: Multiple windows -*- September 13, 2018
![Page 9: User Interfaces - Lecture 18 Cocoa: Multiple windows · 2018. 9. 14. · NSWindowController (or its subclass) and associate it with a NIB file I Window method of NSWindowController](https://reader036.vdocuments.us/reader036/viewer/2022071009/5fc76ea635059622f15853cb/html5/thumbnails/9.jpg)
ApplicationWindow Delegate
8
Hamza Bennani -*- COSC346 -*- Cocoa: Multiple windows -*- September 13, 2018
![Page 10: User Interfaces - Lecture 18 Cocoa: Multiple windows · 2018. 9. 14. · NSWindowController (or its subclass) and associate it with a NIB file I Window method of NSWindowController](https://reader036.vdocuments.us/reader036/viewer/2022071009/5fc76ea635059622f15853cb/html5/thumbnails/10.jpg)
"File’s Owner" and NIB files
I The process of loading a NIB file (to load a window) istrigged by an object
I That object is the "file’s owner" - referring to ownership ofthe NIB file
I Class of "file’s owner" is stored in the NIB file: used as aproxy to load other elements on init.
I The file’s owner, or its delegate, can store outlets to theelements in the window
I Trouble creating an outlet? Check if class where you areplacing outlet is "file’s owner" for XIB file
9
Hamza Bennani -*- COSC346 -*- Cocoa: Multiple windows -*- September 13, 2018
![Page 11: User Interfaces - Lecture 18 Cocoa: Multiple windows · 2018. 9. 14. · NSWindowController (or its subclass) and associate it with a NIB file I Window method of NSWindowController](https://reader036.vdocuments.us/reader036/viewer/2022071009/5fc76ea635059622f15853cb/html5/thumbnails/11.jpg)
"File’s Owner" single/multi window
I In a single-window application, "file’s owner" for mainwindow is the NSApplication
I Pre Xcode 8.3, a single-window application set up theAppDelegate to be the "file’s owner"
I In a multi-window application, you need a "file’s owner" thatwill have a new object instance for each new window
I NSApplication is a singleton, so it cannot be a "file’s owner"for multiple windows
I NSWindowController is often chosen to be the "file’s owner"for windows loaded at run-time
10
Hamza Bennani -*- COSC346 -*- Cocoa: Multiple windows -*- September 13, 2018
![Page 12: User Interfaces - Lecture 18 Cocoa: Multiple windows · 2018. 9. 14. · NSWindowController (or its subclass) and associate it with a NIB file I Window method of NSWindowController](https://reader036.vdocuments.us/reader036/viewer/2022071009/5fc76ea635059622f15853cb/html5/thumbnails/12.jpg)
ApplicationMulti-window
11
Hamza Bennani -*- COSC346 -*- Cocoa: Multiple windows -*- September 13, 2018
![Page 13: User Interfaces - Lecture 18 Cocoa: Multiple windows · 2018. 9. 14. · NSWindowController (or its subclass) and associate it with a NIB file I Window method of NSWindowController](https://reader036.vdocuments.us/reader036/viewer/2022071009/5fc76ea635059622f15853cb/html5/thumbnails/13.jpg)
NSViewController
I Library style applications may need to load and manageviews in a window dynamically
I NSViewController is used to manage multiple viewsI Has methods for runtime load / display of views
I Storyboard-based GUI design in Xcode provides anNSViewController as default starting point for IBOutletsand IBActions
12
Hamza Bennani -*- COSC346 -*- Cocoa: Multiple windows -*- September 13, 2018
![Page 14: User Interfaces - Lecture 18 Cocoa: Multiple windows · 2018. 9. 14. · NSWindowController (or its subclass) and associate it with a NIB file I Window method of NSWindowController](https://reader036.vdocuments.us/reader036/viewer/2022071009/5fc76ea635059622f15853cb/html5/thumbnails/14.jpg)
Other windowsNSPanel
I NSPanel is a subclass of NSWindowI It is a special type of window that functions as an auxiliary
window to an existing windowI Cannot be the main windowI Lightweight: typically not released upon closing, as it is
used oftenI Example: the "open file" or "save file" panel
13
Hamza Bennani -*- COSC346 -*- Cocoa: Multiple windows -*- September 13, 2018
![Page 15: User Interfaces - Lecture 18 Cocoa: Multiple windows · 2018. 9. 14. · NSWindowController (or its subclass) and associate it with a NIB file I Window method of NSWindowController](https://reader036.vdocuments.us/reader036/viewer/2022071009/5fc76ea635059622f15853cb/html5/thumbnails/15.jpg)
Other WindowsDialog box
I Alerts are modal windows: demand user attentionI "Are you sure you want to erase your hard drive?"I Good UI design tries to minimise alerts
I Alerts are easy to create
14
Hamza Bennani -*- COSC346 -*- Cocoa: Multiple windows -*- September 13, 2018
![Page 16: User Interfaces - Lecture 18 Cocoa: Multiple windows · 2018. 9. 14. · NSWindowController (or its subclass) and associate it with a NIB file I Window method of NSWindowController](https://reader036.vdocuments.us/reader036/viewer/2022071009/5fc76ea635059622f15853cb/html5/thumbnails/16.jpg)
Summary
In the last two lectures we covered the windows and viewhierarchy that constitute the fundamental aspects of Cocoa’sGUI. We have also introduced controllers and delegates thatmanage the run-time behaviour of multi-window applications.
I NSWindow - class controlling the display aspects of awindow
I NSWindowDelegate - protocol for window’s delegate,which reacts to window events
I NSView - draws content in a rectangular area,coordinates, geometric operations
I NSWindowController - controls runtime windowresources
I NSViewController (optional) - controls runtime viewresources 15
Hamza Bennani -*- COSC346 -*- Cocoa: Multiple windows -*- September 13, 2018
![Page 17: User Interfaces - Lecture 18 Cocoa: Multiple windows · 2018. 9. 14. · NSWindowController (or its subclass) and associate it with a NIB file I Window method of NSWindowController](https://reader036.vdocuments.us/reader036/viewer/2022071009/5fc76ea635059622f15853cb/html5/thumbnails/17.jpg)
Timer App
16
Hamza Bennani -*- COSC346 -*- Cocoa: Multiple windows -*- September 13, 2018
![Page 18: User Interfaces - Lecture 18 Cocoa: Multiple windows · 2018. 9. 14. · NSWindowController (or its subclass) and associate it with a NIB file I Window method of NSWindowController](https://reader036.vdocuments.us/reader036/viewer/2022071009/5fc76ea635059622f15853cb/html5/thumbnails/18.jpg)
Timer AppMVC
17
Hamza Bennani -*- COSC346 -*- Cocoa: Multiple windows -*- September 13, 2018
![Page 19: User Interfaces - Lecture 18 Cocoa: Multiple windows · 2018. 9. 14. · NSWindowController (or its subclass) and associate it with a NIB file I Window method of NSWindowController](https://reader036.vdocuments.us/reader036/viewer/2022071009/5fc76ea635059622f15853cb/html5/thumbnails/19.jpg)
Timer AppMulti-Window
18
Hamza Bennani -*- COSC346 -*- Cocoa: Multiple windows -*- September 13, 2018