mac 純程式碼建立tableview
iOS和Mac OS的tableview使用略有不同
Mac OS的tableView需要一個Container來包裹它,才可以滑動,而iOS的不用
Mac OS的tableview裡面多了一個概念叫做column(列),而iOS中沒有這個概念
iOS中有section的概念,可是Mac OS中沒有(NSCollectionView中有)
註釋:如果Mac開發中需求必需使用section的話,可以去研究下NSCollectionView
Mac os的tableview在datasource做檢視的時候,有兩種情況:
1、View Based TableView
2、Cell Based TableView
這兩種情況可用的delegate方法不太相同,需要注意,否則可能出現delegate方法不被呼叫的問題
@interface AppDelegate ()<NSTableViewDataSource,NSTableViewDelegate>
{
NSScrollView *_tableContainerView;
NSMutableArray *_dataSourceArray;
NSTextField *_scrollTF;
NSButton *_deleteBtn;
NSButton *_addBtn;
NSInteger _selectedRowNum;
}
@property (weak) IBOutlet NSWindow *window;
@property (nonatomic) NSTableView *tableView;
@end
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
//虛擬的dataSource
_dataSourceArray = [[NSMutableArray alloc] initWithObjects:@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9", nil];
_selectedRowNum = -1 ;
//刪除按鈕
_deleteBtn = [[NSButton alloc] initWithFrame:CGRectMake(415, 250, 70, 25)];
_deleteBtn.title = @"刪除選中行";
_deleteBtn.wantsLayer = YES;
_deleteBtn.layer.cornerRadius = 3.0f;
_deleteBtn.layer.borderColor = [NSColor lightGrayColor].CGColor;
[_deleteBtn setTarget:self];
_deleteBtn.action = @selector(deleteTheSelectedRow);
[self.window.contentView addSubview:_deleteBtn];
//新增按鈕
_addBtn = [[NSButton alloc] initWithFrame:CGRectMake(415, 170, 70, 25)];
_addBtn.title = @"上面添一行";
_addBtn.wantsLayer = YES;
_addBtn.layer.cornerRadius = 3.0f;
_addBtn.layer.borderColor = [NSColor lightGrayColor].CGColor;
[_addBtn setTarget:self];
_addBtn.action = @selector(addRowUnderTheSelectedRow);
[self.window.contentView addSubview:_addBtn];
//滾動顯示的TF
_scrollTF = [[NSTextField alloc] initWithFrame:CGRectMake(415, 90, 80, 15)];
_scrollTF.stringValue = @"滾動 0.0";
_scrollTF.font = [NSFont systemFontOfSize:15.0f];
_scrollTF.textColor = [NSColor blackColor];
_scrollTF.drawsBackground = NO;
_scrollTF.bordered = NO;
_scrollTF.focusRingType = NSFocusRingTypeNone;
_scrollTF.editable = NO;
[self.window.contentView addSubview:_scrollTF];
//tableView
_tableContainerView = [[NSScrollView alloc] initWithFrame:CGRectMake(0, 0, 400, 309)];
_tableView = [[NSTableView alloc] initWithFrame:CGRectMake(0, 20,
_tableContainerView.frame.size.width-20,
_tableContainerView.frame.size.height)];
[_tableView setBackgroundColor:[NSColor colorWithCalibratedRed:220.0/255 green:220.0/255 blue:220.0/255 alpha:1.0]];
_tableView.focusRingType = NSFocusRingTypeNone; //tableview獲得焦點時的風格
_tableView.selectionHighlightStyle = NSTableViewSelectionHighlightStyleRegular;//行高亮的風格
_tableView.headerView.frame = NSZeroRect; //表頭
_tableView.delegate = self;
_tableView.dataSource = self;
// 第一列
NSTableColumn * column1 = [[NSTableColumn alloc] initWithIdentifier:@"firstColumn"];
[column1 setWidth:200];
[_tableView addTableColumn:column1];//第一列
// 第二列
NSTableColumn * column2 = [[NSTableColumn alloc] initWithIdentifier:@"secondColumn"];
[column2 setWidth:200];
[_tableView addTableColumn:column2];//第二列
[_tableContainerView setDocumentView:_tableView];
[_tableContainerView setDrawsBackground:NO]; //不畫背景(背景預設畫成白色)
[_tableContainerView setHasVerticalScroller:YES]; //有垂直滾動條
//[_tableContainer setHasHorizontalScroller:YES]; //有水平滾動條
_tableContainerView.autohidesScrollers = YES; //自動隱藏滾動條(滾動的時候出現)
[self.window.contentView addSubview:_tableContainerView];
//監測tableview滾動
[[NSNotificationCenter defaultCenter]addObserver:self
selector:@selector(tableviewDidScroll:)
name:NSViewBoundsDidChangeNotification
object:[[_tableView enclosingScrollView] contentView]];
}
#pragma mark - NSTableViewDataSource,NSTableViewDelegate
#pragma mark -required methods
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
{
return _dataSourceArray.count;
}
//這個方法雖然不返回什麼東西,但是必須實現,不實現可能會出問題-比如行檢視顯示不出來等。(10.11貌似不實現也可以,可是10.10及以下還是不行的)
- (nullable id)tableView:(NSTableView *)tableView objectValueForTableColumn:(nullable NSTableColumn *)tableColumn row:(NSInteger)row
{
return nil;
}
#pragma mark -other methods
- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row
{
return 58;
}
- (nullable NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(nullable NSTableColumn *)tableColumn row:(NSInteger)row
{
NSString *strIdt=[tableColumn identifier];
NSTableCellView *aView = [tableView makeViewWithIdentifier:strIdt owner:self];
if (!aView)
aView = [[NSTableCellView alloc]initWithFrame:CGRectMake(0, 0, tableColumn.width, 58)];
else
for (NSView *view in aView.subviews)[view removeFromSuperview];
NSTextField *textField = [[NSTextField alloc] initWithFrame:CGRectMake(15, 20, 156+50, 17)];
textField.stringValue = [NSString stringWithFormat:@"%@-ºµº-%@",tableColumn.identifier,[_dataSourceArray objectAtIndex:row]];
textField.font = [NSFont systemFontOfSize:15.0f];
textField.textColor = [NSColor blackColor];
textField.drawsBackground = NO;
textField.bordered = NO;
textField.focusRingType = NSFocusRingTypeNone;
textField.editable = NO;
[aView addSubview:textField];
return aView;
}
- (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(NSInteger)row
{
// NSLog(@"====%ld", (long)row);
_selectedRowNum = row;
return YES;
}
- (void)tableView:(NSTableView *)tableView didClickTableColumn:(NSTableColumn *)tableColumn{
NSLog(@"%@", tableColumn.dataCell);
}
#pragma mark - tableview滾動處理
-(void)tableviewDidScroll:(NSNotification *)notification
{
NSClipView *contentView = [notification object];
CGFloat scrollY = contentView.visibleRect.origin.y-20;//這裡減去20是因為tableHeader的20高度
_scrollTF.stringValue = [NSString stringWithFormat:@"滾動 %.1f",scrollY];
}
#pragma mark - 刪除&&新增某一行
-(void)deleteTheSelectedRow
{
if (_selectedRowNum == -1) {NSLog(@"請先選擇要刪除的行"); return;}
[_tableView beginUpdates];
[_dataSourceArray removeObjectAtIndex:_selectedRowNum];
[_tableView removeRowsAtIndexes:[NSIndexSet indexSetWithIndex:_selectedRowNum] withAnimation:NSTableViewAnimationSlideUp];
[_tableView endUpdates];
_selectedRowNum = -1;
}
-(void)addRowUnderTheSelectedRow
{
if (_selectedRowNum == -1) {NSLog(@"請先選擇要哪行上面添一行"); return;}
NSString *seletedDataObject = [_dataSourceArray objectAtIndex:_selectedRowNum];
NSString *addObject = [NSString stringWithFormat:@"%@+",seletedDataObject];
[_tableView beginUpdates];
[_dataSourceArray insertObject:addObject atIndex:_selectedRowNum];
[_tableView insertRowsAtIndexes:[NSIndexSet indexSetWithIndex:_selectedRowNum] withAnimation:NSTableViewAnimationSlideDown];
[_tableView endUpdates];
_selectedRowNum++;
}
#pragma mark -
- (void)applicationWillTerminate:(NSNotification *)aNotification {
// Insert code here to tear down your application
}
// 選中的響應
-(void)tableViewSelectionDidChange:(nonnull NSNotification* )notification{
self.tableView = notification.object;
//do something
NSLog(@"-----%ld", (long)self.tableView.selectedRow);
}
相關推薦
mac 純程式碼建立tableview
iOS和Mac OS的tableview使用略有不同 Mac OS的tableView需要一個Container來包裹它,才可以滑動,而iOS的不用 Mac OS的tableview裡面多了一個概念叫做column(列),而iOS中沒有這個概念
MFC動態建立dialog,純程式碼建立dialog
參考:https://www.cnblogs.com/lidabo/p/3447007.html 大概思路:新增一個類,作為對話方塊模板 DlgTemplate.h #pragma once #include "afx.h" #define DLG_TEMPLATE_BUFFER_M
c 通過純程式碼建立桌面快捷方式 建立程式選單項 將網頁新增到收藏夾
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
二、通過純程式碼建立的UICollectionView的簡單使用
之前寫了一個Xib建立UiCollectionView的簡單使用的demo,現在寫個用純程式碼寫的,原理其實差不多,只是那個Cell之前是用XIb現在用一個繼承UiColelctionViewCell的類代替,如下所示: 1.首先建立一個CollectionCell的類繼
SparkSQL建立RDD:UDF(UserDataFrame)使用者建立自定義函式(包含動態建立schema,使用者自定義函式,查詢字元的個數)【Java版純程式碼】
Java版程式碼: package com.bjsxt; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.apache.spark.Spark
SparkSQL建立RDD:UDAF(UserDefinedAggregatedFunction)使用者自定義聚合函式【Java版純程式碼】
要實現8個方法,8個方法中,最為重要的有3個: initialize:初始化,在給,map端每一個分割槽的每一個key進行初始化,給0 update:在map端聚合 merge: 在reduce端聚合 Java版程式碼: package com.bjsxt; im
純程式碼TableView例項
UITableView是app開發中常用到的控制元件,功能很強大,多用於資料的顯示。下面以一個簡單的例項來介紹tableview的基本用法。(適合新手,高手飄過) @interface TableViewTestViewController : UIViewController<UITabl
swift 裡面tableview的cell程式碼建立方法
網上搜了好多,都是xib拖得,手寫的幾乎沒有,作為一個手寫黨,不能忍受啊!於是乎,寫了一個自認為可以的建立方法 。求各位swift大神指點 (Xcode版本6.4) 程式碼:在tableview裡面的使用 import UIKit class CustomCellTes
IOS刪除Storyboard純程式碼工程的建立步驟
純程式碼Xcode工程的建立步驟 1建立一個新工程 2 刪除MainStoryBord ,LauchScreen.storyboard,ViewController.m,ViewController.h 備註:7.3版的LauchScreen.st
SparkStreaming部分:updateStateByKey運算元(包含從Linux端獲取資料,flatmap切分,maptopair分類,寫入到本地建立的資料夾中)【Java版純程式碼】
package com.bjsxt; import java.util.List; import org.apache.spark.SparkConf; import org.apache.spark.api.java.function.FlatMapFunction;
iOS 純程式碼設定導航欄上建立左按鈕右按鈕
應該首先再appdelegate.m 裡面新增程式碼 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithO
OC 建立TableView基類並結合MJRefresh實現上拉重新整理,下拉載入
1.建立繼承自UITableView的基類BaseTableView: #import <UIKit/UIKit.h> @class BaseTableView; @protocol BaseTableViewDelegate <NSObject> @option
SQLserver程式碼建立約束
約束-保證資料完整性 資料庫約束是為了保證資料的完整性(正確性)而實現的一套機制。當建立了主外來鍵關係後,如果在外來鍵表中有任何記錄引用了主鍵表中的某條記錄,則在主鍵表中不能刪除該記錄。同時主鍵表也不能刪除。 注意:建立約束時,如果表中已經存在“非法資料”(與約束不一致的資料)
程式碼建立 WPF 旋轉動畫
原文: 程式碼建立 WPF 旋轉動畫 一、WPF窗體上有一個名為rectangle2的矩形 對應的XAML如下: <Window x:Class="WpfVideo.Window1" xmln
使用ABAP程式碼建立S/4HANA裡的Sales Order
下圖是使用ABAP程式碼建立的S/4HANA的Sales Order的截圖: 其中紅色區域的值是我程式碼裡硬編碼的,而藍色是函式SD_SALESDOCUMENT_CREATE自己建立的。 來看下程式碼: DATA: ls_header TYPE bapisdhd1, ls_headerx
C# GDI繪製儀表盤(純程式碼實現)
純程式碼實現GDI繪製儀表盤,效果在程式碼下面。public partial class HalfDashboardUc : UserControl { /// <summary> /// 儀表盤背景圖片 /// </summar
mac電腦bash_profile建立,開啟,編輯,儲存
.bash_profile就像Windows下面的環境變數視窗,只不過這裡是用編輯器來控制環境變數。 1、建立 .bash_profile 啟動終端, 進入當前使用者的home目錄(預設就是): cd ~
java程式碼實現LogBack動態輸出日誌【無配置檔案純程式碼】
需求: 需要傳入某一個檔案或者類或者方法的名字,生成對應日誌檔案,且每一個傳入名字的檔案單獨有一個資料夾,子資料夾為日期,日期資料夾裡面包含warn.log,error.log,debug.log,info.log。通過過濾器實
非外掛純程式碼實現WordPress增加瀏覽次數統計及顯示評論數
非外掛純程式碼實現WordPress增加瀏覽次數統計及顯示評論數 wp站點有一段時間了,之前優化了首頁載入速度,又感覺缺少瀏覽次數的統計很不方便,於是便折騰了一下,對瀏覽
二叉樹java程式碼建立
/** * * @ClassName: Tree * @Description: (二叉樹) * @author Administrator * @date 2018年5月31日 下午10:59:00 * */ public class Tree { private int []arr=