Is AppKit causing you frustration? Instead of just complaining about it, lets try to make it better by compiling a list of specific problems with AppKit. Leave a comment below, and I'll include it in the list. The list will be sorted according to the number of comments for a problem.
- The use of cells in specific controls such as
NSTextFieldandNSButtonmake them difficult to customize. - AppKit controls need image-based customization properties like their UIKit counterparts.
NSTableViewhas odd animation artifacts when scrolling with the keyboard with a fast key repeat.NSCollectionViewhas no view recycling, poor API design, and is lacking compared toUICollectionView.NSClipViewhas performance issues. (RBLClipViewattempts to fix this)NSWindows are really difficult to customize. (INAppStoreWindowattempts to fix this).NSWindowanimation is poor without the use of some not-so-nice hacks.NSViewControllercould be more useful. It has-loadViewbut no other lifecycle methods.NSBrowseris not view-based likeNSTableViewandNSOutlineView.NSSplitViewhas a lacking API. Simple customization like setting priorities and min/max sizes for views is unnecessarily complex.- AppKit does not provide HUD-styled controls. (
SNRHUDKitattempts to fix this) NSSliderrequires use of private method-_usesCustomTrackImagein order to completely customize appearance.NSProgressIndicatorstill draws the original progress bar even if drawing is overridden.NSTextFieldCelldoes not have vertically-centered text. A subclass is required.- Interface Builder does not support bindings for custom controls.
A couple more minor to add:
NSBrowserhas not been updated to be view based likeNSTableViewandNSOutlineViewNSSplitViewhas a very difficult to use API. Simple things like setting priorities and min/max sizes for views is unnecessarily complex.NSSlider's drawing is impossible to customize without overriding a private method (- (BOOL)_usesCustomTrackImage). Without this override, it'll draw the default bar regardless of how you override the drawing methods.NSProgressIndicatoralso draws the default progress bar even if you override the drawing in a subclass.NSTextFieldCell's text isn't vertically centered. It requires a subclass like this to get that working properly.