Skip to content

Repository files navigation

WMPageController 中文介绍

PlatformLicenseCocoaPods Version

An easy solution to page controllers like NetEase News

Overview

Change Log

See CHANGELOG for more information.

Basic use

Create an controller extends from WMPageController.There are two ways to init the WMPageController:

Init with Classes

Use the following constructor to init the controller:

- (instancetype)initWithViewControllerClasses:(NSArray *)classes andTheirTitles:(NSArray *)titles;

Here are two important porperties:

classes :contains the classes of child view controllers, just like [UITableViewController class];
titles :Each View controller's title to show in the menu view at the top of the view;

Use datasource (Recommend This Way!)

The usage is very familiar to UITableView, these are the methods need to implement:

- (NSInteger)numbersOfChildControllersInPageController:(WMPageController *)pageController;
- (__kindof UIViewController *)pageController:(WMPageController *)pageController viewControllerAtIndex:(NSInteger)index;
- (NSString *)pageController:(WMPageController *)pageController titleAtIndex:(NSInteger)index;

Just implement these datasource methods in YOUR WMPageController after initialize it.

Customize Content's Frame

It's easy for you to customize your controller as following, just implement these two datasource methods.

- (CGRect)pageController:(WMPageController *)pageController preferredFrameForContentView:(WMScrollView *)contentView;
- (CGRect)pageController:(WMPageController *)pageController preferredFrameForMenuView:(WMMenuView *)menuView;

When you want to change the frame of contentView, you need to call -forceLayoutSubViews method. This will recall the datasource method above and re-layout subviews. If you are interested, see viewFrameExample for more detail.

Use Storyboard / xib

1.If you init the WMPageController with child controller's class,override the -init method in WMPageController's childViewController, For example:

- (instancetype)init {
return [selfinitWithNibName:@"xxxViewController"bundle:nil];
}

2.If you are using datasource, Just implement -pageController:viewControllerAtIndex: as following:

- (UIViewController *)pageController:(WMPageController *)pageController viewControllerAtIndex:(NSInteger)index {
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main"bundle:nil];
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"WMViewController"];
return vc;
}

See StoryboardExample for more detail.

Styles

You can easily change style by setting xxxPageController.style = WMMenuViewStyleLine.
If you want menuView to show on the navigation bar, set .showOnNavigationBar = YES;

Using CocoaPods

If you want the newest version, try 2.4.0 (This has some API modified)

pod 'WMPageController', '~> 2.4.0' 

If you perfer the old, just use 2.3.0 and it's fine.

pod 'WMPageController', '2.3.0' 

Note

  1. If you have any trouble with content controller's frame or size,just try set viewFrame property, which make you free to customize your own size.

  2. You can put every controller in WMPageController,But if you want have a UICollectionViewController in, please have an attention to UICollectionViewController's init method.
    You should override the - init to give UICollectionViewController a UICollectionViewLayout. Here is an example:

- (instancetype)init {
// init layout here...
self = [selfinitWithCollectionViewLayout:layout];
if (self) {
// insert code here...
}
return self;
}

License

This project is under MIT License. See LICENSE file for more information.

About

An easy solution to page controllers like NetEase News

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - semnyqu/WMPageController: An easy solution to page controllers like NetEase News · GitHub
Skip to content

Repository files navigation

WMPageController 中文介绍

PlatformLicenseCocoaPods Version

An easy solution to page controllers like NetEase News

Overview

Change Log

See CHANGELOG for more information.

Basic use

Create an controller extends from WMPageController.There are two ways to init the WMPageController:

Init with Classes

Use the following constructor to init the controller:

- (instancetype)initWithViewControllerClasses:(NSArray *)classes andTheirTitles:(NSArray *)titles;

Here are two important porperties:

classes :contains the classes of child view controllers, just like [UITableViewController class];
titles :Each View controller's title to show in the menu view at the top of the view;

Use datasource (Recommend This Way!)

The usage is very familiar to UITableView, these are the methods need to implement:

- (NSInteger)numbersOfChildControllersInPageController:(WMPageController *)pageController;
- (__kindof UIViewController *)pageController:(WMPageController *)pageController viewControllerAtIndex:(NSInteger)index;
- (NSString *)pageController:(WMPageController *)pageController titleAtIndex:(NSInteger)index;

Just implement these datasource methods in YOUR WMPageController after initialize it.

Customize Content's Frame

It's easy for you to customize your controller as following, just implement these two datasource methods.

- (CGRect)pageController:(WMPageController *)pageController preferredFrameForContentView:(WMScrollView *)contentView;
- (CGRect)pageController:(WMPageController *)pageController preferredFrameForMenuView:(WMMenuView *)menuView;

When you want to change the frame of contentView, you need to call -forceLayoutSubViews method. This will recall the datasource method above and re-layout subviews. If you are interested, see viewFrameExample for more detail.

Use Storyboard / xib

1.If you init the WMPageController with child controller's class,override the -init method in WMPageController's childViewController, For example:

- (instancetype)init {
return [selfinitWithNibName:@"xxxViewController"bundle:nil];
}

2.If you are using datasource, Just implement -pageController:viewControllerAtIndex: as following:

- (UIViewController *)pageController:(WMPageController *)pageController viewControllerAtIndex:(NSInteger)index {
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main"bundle:nil];
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"WMViewController"];
return vc;
}

See StoryboardExample for more detail.

Styles

You can easily change style by setting xxxPageController.style = WMMenuViewStyleLine.
If you want menuView to show on the navigation bar, set .showOnNavigationBar = YES;

Using CocoaPods

If you want the newest version, try 2.4.0 (This has some API modified)

pod 'WMPageController', '~> 2.4.0' 

If you perfer the old, just use 2.3.0 and it's fine.

pod 'WMPageController', '2.3.0' 

Note

  1. If you have any trouble with content controller's frame or size,just try set viewFrame property, which make you free to customize your own size.

  2. You can put every controller in WMPageController,But if you want have a UICollectionViewController in, please have an attention to UICollectionViewController's init method.
    You should override the - init to give UICollectionViewController a UICollectionViewLayout. Here is an example:

- (instancetype)init {
// init layout here...
self = [selfinitWithCollectionViewLayout:layout];
if (self) {
// insert code here...
}
return self;
}

License

This project is under MIT License. See LICENSE file for more information.

About

An easy solution to page controllers like NetEase News

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - semnyqu/WMPageController: An easy solution to page controllers like NetEase News · GitHub
Skip to content

Repository files navigation

WMPageController 中文介绍

PlatformLicenseCocoaPods Version

An easy solution to page controllers like NetEase News

Overview

Change Log

See CHANGELOG for more information.

Basic use

Create an controller extends from WMPageController.There are two ways to init the WMPageController:

Init with Classes

Use the following constructor to init the controller:

- (instancetype)initWithViewControllerClasses:(NSArray *)classes andTheirTitles:(NSArray *)titles;

Here are two important porperties:

classes :contains the classes of child view controllers, just like [UITableViewController class];
titles :Each View controller's title to show in the menu view at the top of the view;

Use datasource (Recommend This Way!)

The usage is very familiar to UITableView, these are the methods need to implement:

- (NSInteger)numbersOfChildControllersInPageController:(WMPageController *)pageController;
- (__kindof UIViewController *)pageController:(WMPageController *)pageController viewControllerAtIndex:(NSInteger)index;
- (NSString *)pageController:(WMPageController *)pageController titleAtIndex:(NSInteger)index;

Just implement these datasource methods in YOUR WMPageController after initialize it.

Customize Content's Frame

It's easy for you to customize your controller as following, just implement these two datasource methods.

- (CGRect)pageController:(WMPageController *)pageController preferredFrameForContentView:(WMScrollView *)contentView;
- (CGRect)pageController:(WMPageController *)pageController preferredFrameForMenuView:(WMMenuView *)menuView;

When you want to change the frame of contentView, you need to call -forceLayoutSubViews method. This will recall the datasource method above and re-layout subviews. If you are interested, see viewFrameExample for more detail.

Use Storyboard / xib

1.If you init the WMPageController with child controller's class,override the -init method in WMPageController's childViewController, For example:

- (instancetype)init {
return [selfinitWithNibName:@"xxxViewController"bundle:nil];
}

2.If you are using datasource, Just implement -pageController:viewControllerAtIndex: as following:

- (UIViewController *)pageController:(WMPageController *)pageController viewControllerAtIndex:(NSInteger)index {
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main"bundle:nil];
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"WMViewController"];
return vc;
}

See StoryboardExample for more detail.

Styles

You can easily change style by setting xxxPageController.style = WMMenuViewStyleLine.
If you want menuView to show on the navigation bar, set .showOnNavigationBar = YES;

Using CocoaPods

If you want the newest version, try 2.4.0 (This has some API modified)

pod 'WMPageController', '~> 2.4.0' 

If you perfer the old, just use 2.3.0 and it's fine.

pod 'WMPageController', '2.3.0' 

Note

  1. If you have any trouble with content controller's frame or size,just try set viewFrame property, which make you free to customize your own size.

  2. You can put every controller in WMPageController,But if you want have a UICollectionViewController in, please have an attention to UICollectionViewController's init method.
    You should override the - init to give UICollectionViewController a UICollectionViewLayout. Here is an example:

- (instancetype)init {
// init layout here...
self = [selfinitWithCollectionViewLayout:layout];
if (self) {
// insert code here...
}
return self;
}

License

This project is under MIT License. See LICENSE file for more information.

About

An easy solution to page controllers like NetEase News

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - semnyqu/WMPageController: An easy solution to page controllers like NetEase News · GitHub
Skip to content

Repository files navigation

WMPageController 中文介绍

PlatformLicenseCocoaPods Version

An easy solution to page controllers like NetEase News

Overview

Change Log

See CHANGELOG for more information.

Basic use

Create an controller extends from WMPageController.There are two ways to init the WMPageController:

Init with Classes

Use the following constructor to init the controller:

- (instancetype)initWithViewControllerClasses:(NSArray *)classes andTheirTitles:(NSArray *)titles;

Here are two important porperties:

classes :contains the classes of child view controllers, just like [UITableViewController class];
titles :Each View controller's title to show in the menu view at the top of the view;

Use datasource (Recommend This Way!)

The usage is very familiar to UITableView, these are the methods need to implement:

- (NSInteger)numbersOfChildControllersInPageController:(WMPageController *)pageController;
- (__kindof UIViewController *)pageController:(WMPageController *)pageController viewControllerAtIndex:(NSInteger)index;
- (NSString *)pageController:(WMPageController *)pageController titleAtIndex:(NSInteger)index;

Just implement these datasource methods in YOUR WMPageController after initialize it.

Customize Content's Frame

It's easy for you to customize your controller as following, just implement these two datasource methods.

- (CGRect)pageController:(WMPageController *)pageController preferredFrameForContentView:(WMScrollView *)contentView;
- (CGRect)pageController:(WMPageController *)pageController preferredFrameForMenuView:(WMMenuView *)menuView;

When you want to change the frame of contentView, you need to call -forceLayoutSubViews method. This will recall the datasource method above and re-layout subviews. If you are interested, see viewFrameExample for more detail.

Use Storyboard / xib

1.If you init the WMPageController with child controller's class,override the -init method in WMPageController's childViewController, For example:

- (instancetype)init {
return [selfinitWithNibName:@"xxxViewController"bundle:nil];
}

2.If you are using datasource, Just implement -pageController:viewControllerAtIndex: as following:

- (UIViewController *)pageController:(WMPageController *)pageController viewControllerAtIndex:(NSInteger)index {
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main"bundle:nil];
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"WMViewController"];
return vc;
}

See StoryboardExample for more detail.

Styles

You can easily change style by setting xxxPageController.style = WMMenuViewStyleLine.
If you want menuView to show on the navigation bar, set .showOnNavigationBar = YES;

Using CocoaPods

If you want the newest version, try 2.4.0 (This has some API modified)

pod 'WMPageController', '~> 2.4.0' 

If you perfer the old, just use 2.3.0 and it's fine.

pod 'WMPageController', '2.3.0' 

Note

  1. If you have any trouble with content controller's frame or size,just try set viewFrame property, which make you free to customize your own size.

  2. You can put every controller in WMPageController,But if you want have a UICollectionViewController in, please have an attention to UICollectionViewController's init method.
    You should override the - init to give UICollectionViewController a UICollectionViewLayout. Here is an example:

- (instancetype)init {
// init layout here...
self = [selfinitWithCollectionViewLayout:layout];
if (self) {
// insert code here...
}
return self;
}

License

This project is under MIT License. See LICENSE file for more information.

About

An easy solution to page controllers like NetEase News

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - semnyqu/WMPageController: An easy solution to page controllers like NetEase News · GitHub
Skip to content

Repository files navigation

WMPageController 中文介绍

PlatformLicenseCocoaPods Version

An easy solution to page controllers like NetEase News

Overview

Change Log

See CHANGELOG for more information.

Basic use

Create an controller extends from WMPageController.There are two ways to init the WMPageController:

Init with Classes

Use the following constructor to init the controller:

- (instancetype)initWithViewControllerClasses:(NSArray *)classes andTheirTitles:(NSArray *)titles;

Here are two important porperties:

classes :contains the classes of child view controllers, just like [UITableViewController class];
titles :Each View controller's title to show in the menu view at the top of the view;

Use datasource (Recommend This Way!)

The usage is very familiar to UITableView, these are the methods need to implement:

- (NSInteger)numbersOfChildControllersInPageController:(WMPageController *)pageController;
- (__kindof UIViewController *)pageController:(WMPageController *)pageController viewControllerAtIndex:(NSInteger)index;
- (NSString *)pageController:(WMPageController *)pageController titleAtIndex:(NSInteger)index;

Just implement these datasource methods in YOUR WMPageController after initialize it.

Customize Content's Frame

It's easy for you to customize your controller as following, just implement these two datasource methods.

- (CGRect)pageController:(WMPageController *)pageController preferredFrameForContentView:(WMScrollView *)contentView;
- (CGRect)pageController:(WMPageController *)pageController preferredFrameForMenuView:(WMMenuView *)menuView;

When you want to change the frame of contentView, you need to call -forceLayoutSubViews method. This will recall the datasource method above and re-layout subviews. If you are interested, see viewFrameExample for more detail.

Use Storyboard / xib

1.If you init the WMPageController with child controller's class,override the -init method in WMPageController's childViewController, For example:

- (instancetype)init {
return [selfinitWithNibName:@"xxxViewController"bundle:nil];
}

2.If you are using datasource, Just implement -pageController:viewControllerAtIndex: as following:

- (UIViewController *)pageController:(WMPageController *)pageController viewControllerAtIndex:(NSInteger)index {
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main"bundle:nil];
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"WMViewController"];
return vc;
}

See StoryboardExample for more detail.

Styles

You can easily change style by setting xxxPageController.style = WMMenuViewStyleLine.
If you want menuView to show on the navigation bar, set .showOnNavigationBar = YES;

Using CocoaPods

If you want the newest version, try 2.4.0 (This has some API modified)

pod 'WMPageController', '~> 2.4.0' 

If you perfer the old, just use 2.3.0 and it's fine.

pod 'WMPageController', '2.3.0' 

Note

  1. If you have any trouble with content controller's frame or size,just try set viewFrame property, which make you free to customize your own size.

  2. You can put every controller in WMPageController,But if you want have a UICollectionViewController in, please have an attention to UICollectionViewController's init method.
    You should override the - init to give UICollectionViewController a UICollectionViewLayout. Here is an example:

- (instancetype)init {
// init layout here...
self = [selfinitWithCollectionViewLayout:layout];
if (self) {
// insert code here...
}
return self;
}

License

This project is under MIT License. See LICENSE file for more information.

About

An easy solution to page controllers like NetEase News

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - semnyqu/WMPageController: An easy solution to page controllers like NetEase News · GitHub
Skip to content

Repository files navigation

WMPageController 中文介绍

PlatformLicenseCocoaPods Version

An easy solution to page controllers like NetEase News

Overview

Change Log

See CHANGELOG for more information.

Basic use

Create an controller extends from WMPageController.There are two ways to init the WMPageController:

Init with Classes

Use the following constructor to init the controller:

- (instancetype)initWithViewControllerClasses:(NSArray *)classes andTheirTitles:(NSArray *)titles;

Here are two important porperties:

classes :contains the classes of child view controllers, just like [UITableViewController class];
titles :Each View controller's title to show in the menu view at the top of the view;

Use datasource (Recommend This Way!)

The usage is very familiar to UITableView, these are the methods need to implement:

- (NSInteger)numbersOfChildControllersInPageController:(WMPageController *)pageController;
- (__kindof UIViewController *)pageController:(WMPageController *)pageController viewControllerAtIndex:(NSInteger)index;
- (NSString *)pageController:(WMPageController *)pageController titleAtIndex:(NSInteger)index;

Just implement these datasource methods in YOUR WMPageController after initialize it.

Customize Content's Frame

It's easy for you to customize your controller as following, just implement these two datasource methods.

- (CGRect)pageController:(WMPageController *)pageController preferredFrameForContentView:(WMScrollView *)contentView;
- (CGRect)pageController:(WMPageController *)pageController preferredFrameForMenuView:(WMMenuView *)menuView;

When you want to change the frame of contentView, you need to call -forceLayoutSubViews method. This will recall the datasource method above and re-layout subviews. If you are interested, see viewFrameExample for more detail.

Use Storyboard / xib

1.If you init the WMPageController with child controller's class,override the -init method in WMPageController's childViewController, For example:

- (instancetype)init {
return [selfinitWithNibName:@"xxxViewController"bundle:nil];
}

2.If you are using datasource, Just implement -pageController:viewControllerAtIndex: as following:

- (UIViewController *)pageController:(WMPageController *)pageController viewControllerAtIndex:(NSInteger)index {
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main"bundle:nil];
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"WMViewController"];
return vc;
}

See StoryboardExample for more detail.

Styles

You can easily change style by setting xxxPageController.style = WMMenuViewStyleLine.
If you want menuView to show on the navigation bar, set .showOnNavigationBar = YES;

Using CocoaPods

If you want the newest version, try 2.4.0 (This has some API modified)

pod 'WMPageController', '~> 2.4.0' 

If you perfer the old, just use 2.3.0 and it's fine.

pod 'WMPageController', '2.3.0' 

Note

  1. If you have any trouble with content controller's frame or size,just try set viewFrame property, which make you free to customize your own size.

  2. You can put every controller in WMPageController,But if you want have a UICollectionViewController in, please have an attention to UICollectionViewController's init method.
    You should override the - init to give UICollectionViewController a UICollectionViewLayout. Here is an example:

- (instancetype)init {
// init layout here...
self = [selfinitWithCollectionViewLayout:layout];
if (self) {
// insert code here...
}
return self;
}

License

This project is under MIT License. See LICENSE file for more information.

About

An easy solution to page controllers like NetEase News

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - semnyqu/WMPageController: An easy solution to page controllers like NetEase News · GitHub
Skip to content

Repository files navigation

WMPageController 中文介绍

PlatformLicenseCocoaPods Version

An easy solution to page controllers like NetEase News

Overview

Change Log

See CHANGELOG for more information.

Basic use

Create an controller extends from WMPageController.There are two ways to init the WMPageController:

Init with Classes

Use the following constructor to init the controller:

- (instancetype)initWithViewControllerClasses:(NSArray *)classes andTheirTitles:(NSArray *)titles;

Here are two important porperties:

classes :contains the classes of child view controllers, just like [UITableViewController class];
titles :Each View controller's title to show in the menu view at the top of the view;

Use datasource (Recommend This Way!)

The usage is very familiar to UITableView, these are the methods need to implement:

- (NSInteger)numbersOfChildControllersInPageController:(WMPageController *)pageController;
- (__kindof UIViewController *)pageController:(WMPageController *)pageController viewControllerAtIndex:(NSInteger)index;
- (NSString *)pageController:(WMPageController *)pageController titleAtIndex:(NSInteger)index;

Just implement these datasource methods in YOUR WMPageController after initialize it.

Customize Content's Frame

It's easy for you to customize your controller as following, just implement these two datasource methods.

- (CGRect)pageController:(WMPageController *)pageController preferredFrameForContentView:(WMScrollView *)contentView;
- (CGRect)pageController:(WMPageController *)pageController preferredFrameForMenuView:(WMMenuView *)menuView;

When you want to change the frame of contentView, you need to call -forceLayoutSubViews method. This will recall the datasource method above and re-layout subviews. If you are interested, see viewFrameExample for more detail.

Use Storyboard / xib

1.If you init the WMPageController with child controller's class,override the -init method in WMPageController's childViewController, For example:

- (instancetype)init {
return [selfinitWithNibName:@"xxxViewController"bundle:nil];
}

2.If you are using datasource, Just implement -pageController:viewControllerAtIndex: as following:

- (UIViewController *)pageController:(WMPageController *)pageController viewControllerAtIndex:(NSInteger)index {
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main"bundle:nil];
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"WMViewController"];
return vc;
}

See StoryboardExample for more detail.

Styles

You can easily change style by setting xxxPageController.style = WMMenuViewStyleLine.
If you want menuView to show on the navigation bar, set .showOnNavigationBar = YES;

Using CocoaPods

If you want the newest version, try 2.4.0 (This has some API modified)

pod 'WMPageController', '~> 2.4.0' 

If you perfer the old, just use 2.3.0 and it's fine.

pod 'WMPageController', '2.3.0' 

Note

  1. If you have any trouble with content controller's frame or size,just try set viewFrame property, which make you free to customize your own size.

  2. You can put every controller in WMPageController,But if you want have a UICollectionViewController in, please have an attention to UICollectionViewController's init method.
    You should override the - init to give UICollectionViewController a UICollectionViewLayout. Here is an example:

- (instancetype)init {
// init layout here...
self = [selfinitWithCollectionViewLayout:layout];
if (self) {
// insert code here...
}
return self;
}

License

This project is under MIT License. See LICENSE file for more information.

About

An easy solution to page controllers like NetEase News

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - semnyqu/WMPageController: An easy solution to page controllers like NetEase News · GitHub
Skip to content

Repository files navigation

WMPageController 中文介绍

PlatformLicenseCocoaPods Version

An easy solution to page controllers like NetEase News

Overview

Change Log

See CHANGELOG for more information.

Basic use

Create an controller extends from WMPageController.There are two ways to init the WMPageController:

Init with Classes

Use the following constructor to init the controller:

- (instancetype)initWithViewControllerClasses:(NSArray *)classes andTheirTitles:(NSArray *)titles;

Here are two important porperties:

classes :contains the classes of child view controllers, just like [UITableViewController class];
titles :Each View controller's title to show in the menu view at the top of the view;

Use datasource (Recommend This Way!)

The usage is very familiar to UITableView, these are the methods need to implement:

- (NSInteger)numbersOfChildControllersInPageController:(WMPageController *)pageController;
- (__kindof UIViewController *)pageController:(WMPageController *)pageController viewControllerAtIndex:(NSInteger)index;
- (NSString *)pageController:(WMPageController *)pageController titleAtIndex:(NSInteger)index;

Just implement these datasource methods in YOUR WMPageController after initialize it.

Customize Content's Frame

It's easy for you to customize your controller as following, just implement these two datasource methods.

- (CGRect)pageController:(WMPageController *)pageController preferredFrameForContentView:(WMScrollView *)contentView;
- (CGRect)pageController:(WMPageController *)pageController preferredFrameForMenuView:(WMMenuView *)menuView;

When you want to change the frame of contentView, you need to call -forceLayoutSubViews method. This will recall the datasource method above and re-layout subviews. If you are interested, see viewFrameExample for more detail.

Use Storyboard / xib

1.If you init the WMPageController with child controller's class,override the -init method in WMPageController's childViewController, For example:

- (instancetype)init {
return [selfinitWithNibName:@"xxxViewController"bundle:nil];
}

2.If you are using datasource, Just implement -pageController:viewControllerAtIndex: as following:

- (UIViewController *)pageController:(WMPageController *)pageController viewControllerAtIndex:(NSInteger)index {
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main"bundle:nil];
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"WMViewController"];
return vc;
}

See StoryboardExample for more detail.

Styles

You can easily change style by setting xxxPageController.style = WMMenuViewStyleLine.
If you want menuView to show on the navigation bar, set .showOnNavigationBar = YES;

Using CocoaPods

If you want the newest version, try 2.4.0 (This has some API modified)

pod 'WMPageController', '~> 2.4.0' 

If you perfer the old, just use 2.3.0 and it's fine.

pod 'WMPageController', '2.3.0' 

Note

  1. If you have any trouble with content controller's frame or size,just try set viewFrame property, which make you free to customize your own size.

  2. You can put every controller in WMPageController,But if you want have a UICollectionViewController in, please have an attention to UICollectionViewController's init method.
    You should override the - init to give UICollectionViewController a UICollectionViewLayout. Here is an example:

- (instancetype)init {
// init layout here...
self = [selfinitWithCollectionViewLayout:layout];
if (self) {
// insert code here...
}
return self;
}

License

This project is under MIT License. See LICENSE file for more information.

About

An easy solution to page controllers like NetEase News

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages