- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个简单的 UITableViewController
,在 UITableView
中有一些静态单元格。 UITableView
正在由另一个 UITableViewController
的 prepareForSegue
填充。此 UITableViewController
有两个部分,其中第一部分是字符串的 NSMutableArray
,第二部分是包含 .txt 文件的 NSMutableArray
用字符串。有些“语言”只有一个部分,而另一些则有两个部分。 UITableView
没有其他特别之处。配合使用教程:http://www.appcoda.com/swipeable-uitableviewcell-tutorial/#disqus_thread ,我设法在单元格上实现了自定义手势,因此我可以滑动单元格以将其标记为收藏。我必须使用该教程中的代码将默认行为从删除更改为星标,如下面的屏幕截图所示:
一旦用户选择了星形图像,我希望单元格本身上有 UIImage,表示该单元格已加星标。
这是一些代码,从 cellForRowAtIndexPath
开始
static NSString *strCellIdentifier = @"CustomLeafletVideoCell";
CustomLeafletVideoTableViewCell *customCell = (CustomLeafletVideoTableViewCell *)[tableView dequeueReusableCellWithIdentifier:strCellIdentifier];
self.rightUtilityButton = [NSMutableArray new];
if (![[NSUserDefaults standardUserDefaults] boolForKey:@"Favourite"])
{
[self.rightUtilityButton sw_addUtilityButtonWithColor:
[UIColor colorWithRed:1.0f green:0.0f blue:0.0f alpha:1.0]
icon:[UIImage imageNamed:@"Favorites@2x.png"]];
}
else if ([[NSUserDefaults standardUserDefaults] boolForKey:@"Favourite"])
{
[self.rightUtilityButton sw_addUtilityButtonWithColor:
[UIColor colorWithRed:1.0f green:0.0f blue:0.0f alpha:1.0]
icon:[UIImage imageNamed:@"Database@2x.png"]];
}
customCell.rightUtilityButtons = self.rightUtilityButton;
customCell.delegate = self;
当用户点击单元格中的图像时,将触发此方法:
- (void)swipeableTableViewCell:(SWTableViewCell *)cell didTriggerRightUtilityButtonWithIndex:(NSInteger)index
{
switch (index) {
case 0:
{
self.selectedRowCollection = [[NSMutableDictionary alloc] init];
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
CustomLeafletVideoTableViewCell *cell = (CustomLeafletVideoTableViewCell*)[self.tableView cellForRowAtIndexPath:indexPath];
// We create a new NSString and assign it to the custom label's text (which is obtained from the cellForRow method)
NSString *cellTitle = cell.customCellLabel.text;
NSLog(@"The text is %@", cellTitle);
NSManagedObjectContext *context = [self managedObjectContext];
Favourites *favourites = [NSEntityDescription insertNewObjectForEntityForName:@"Favourites" inManagedObjectContext:context];
favourites.title = cellTitle;
NSError *error = nil;
if (![context save:&error])
{
// Error
}
[cell hideUtilityButtonsAnimated:YES];
[self.tableView reloadData];
}
}
我将“标题”存储在核心数据中。
问题
当我滑动单元格并按下星形图像时,它不会在指定区域加载带有 UIImageView
的单元格。它没有的原因是因为我真的不明白该怎么做。
我理解答案表明我应该创建一个自定义类,虽然我理解其背后的理论,但我不明白如何正确地实际实现它。
我看过这个引用:Using BOOL objects in NSMutableArray to determine cell statuses选择单元格时使用复选标记作为附件。这有效,但它在同一对应单元格的第一部分和第二部分中放置了一个复选标记。
我发现我可以从 indexPath.row
和 indexPath.section
中获取准确的行号和节号,但我不确定如何获取处理这些信息。我总是可以将 isFavourite
BOOL
添加到 Core Data
模型,但我如何在 cellForRowAtIndexPath 中实际设置它?
总而言之,对于我在这个问题上提出的 250 赏金,我需要了解如何:
indexPath.row
和indexPath.section
,UITableViewController
时,星号都在适当的单元格上我是这里的新手,所以如果您愿意提供尽可能多的信息,我将不胜感激。
此外,我对之后如何处理收藏夹没有任何问题;这有效 - 当一个单元格被标记为收藏时,我只需要将图像放到单元格上。
任何指导将不胜感激。
更新
这是我设置收藏夹的代码:
self.isFavourite = @(!self.isFavourite.boolValue);
其中 self.isFavourite
是在此 UITableViewController
上创建的 NSNumber
属性。
在 cellForRowAtIndexPath
中:
customCell.customCellLabel.text = [NSString stringWithFormat:@"%@",[self.availableLeaflets objectAtIndex:indexPath.row]];
if (self.isFavourite.boolValue)
{
customCell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
customCell.accessoryType = UITableViewCellAccessoryNone;
}
这里的代码是从 self.availableLeaflets
设置标题。这可以在单元格上设置复选标记,但问题是,当我返回此 UITableViewController
时,复选标记并未保留在所选单元格上。
这里,self.availableLeaflets
是一个 NSMutableArray
,它从前面的 UITableViewController
中的 prepareForSegue
填充和设置>。
最佳答案
当用户点击一个单元格中的星标时,您的代码将所有单元格标记为收藏,因为您在 UserDefaults 中仅存储了 1 个键。
您必须分别为每个单元格存储最喜欢的状态。每个单元格必须有自己的“最喜欢的” bool 值。
更新:
这是一个工作示例,说明如何在不使用 Core Data 的情况下实现你想要的。为清楚起见,我简化了示例:
这是你必须做的:
#import "ViewController.h"
#import <CoreData/CoreData.h>
#import "CellData.h"
#import "AppDelegate.h"
@interface ViewController () <UITableViewDataSource, UITableViewDelegate>
@property (nonatomic) UITableView *tableView;
@property (nonatomic) NSMutableDictionary *favoritesDict;
@property (nonatomic) NSInteger context;
@property (nonatomic) NSString *language;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// setup the table view
self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds];
self.tableView.dataSource = self;
self.tableView.delegate = self;
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
[self.view addSubview:self.tableView];
// setup the favorites dictionary in user defaults (if it does not exist)
if ([[NSUserDefaults standardUserDefaults] valueForKey:@"favoritesDict"] == nil) {
[[NSUserDefaults standardUserDefaults] setObject:@{} forKey:@"favoritesDict"];
}
// set the language of your current table view
self.language = @"en";
// load favorites from user defaults
self.favoritesDict = [[[NSUserDefaults standardUserDefaults] valueForKey:@"favoritesDict"] mutableCopy];
}
// this method changes the favorite state of the cell at a given index path
- (void)toggleFavoriteStateForCellAtIndexPath:(NSIndexPath *)indexPath {
// toggle the favorite state of the cell
NSString *key = [NSString stringWithFormat:@"%@_%ld_%ld", self.language, (long)indexPath.section, (long)indexPath.row];
if (self.favoritesDict[key] == nil) {
self.favoritesDict[key] = @(1);
} else {
[self.favoritesDict removeObjectForKey:key];
}
// save the change
[[NSUserDefaults standardUserDefaults] setObject:self.favoritesDict forKey:@"favoritesDict"];
// reload the cell
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}
#pragma mark - UITableViewDataSource
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 2;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 10;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
// add the text to your cell
// set up favorite state
NSString *key = [NSString stringWithFormat:@"%@_%ld_%ld", self.language, (long)indexPath.section, (long)indexPath.row];
if (self.favoritesDict[key]) {
// show the favorite image
cell.accessoryType = UITableViewCellAccessoryCheckmark; // for this example: show checkmark
} else {
// hide the favorite image
cell.accessoryType = UITableViewCellAccessoryNone; // for this example: hide checkmark
}
return cell;
}
#pragma mark - UITableViewDelegate
// toggle the favorite state of the cell when the user selects it
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
[self toggleFavoriteStateForCellAtIndexPath:indexPath];
}
@end
此示例适用于具有多个部分的表格。它使用 NSDictionary 并将收藏的单元格存储在具有以下语法 LANGUAGE_SECTION_ROW
的键中。要检查一个单元格是否被标记为最喜欢的,只需检查字典中是否有相关键的对象。该键的实际值无关紧要。您只需检查 key 。
只需确保在 viewDidLoad
中设置语言字符串即可。
关于ios - 事件发生时更改特定 UITableViewCell 的 UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33420341/
我正在尝试将 WPF CodeBehid 事件(如 Event、Handler、EventSetter)转换为 MVVM 模式。我不允许使用 System.Windows.Controls,因为我使用
我可能误解了 Backbone 中的事件系统,但是当我尝试以下代码时什么也没有发生。当我向 Backbone.Events 扩展对象添加新属性时,它不应该触发某种更改、更新或重置事件吗?就像模型一样吗
我遇到了一个简单的问题,就是无法弄清楚为什么它不起作用。我有一个子组件“app-buttons”,其中我有一个输入字段,我想听,所以我可以根据输入值过滤列表。 如果我将输入放在我有列表的根组件中,一切
System.Timers.Timer 的 Elapsed 事件实际上与 System.Windows.Forms.Timer 的 Tick 事件相同吗? 在特定情况下使用其中一种比使用另一种有优势吗
嗨,这个 javascript 代码段是什么意思。(evt) 部分是如此令人困惑.. evt 不是 bool 值。这个怎么运作? function checkIt(evt) { evt
我正在使用jquery full calendar我试图在事件被删除时保存它。 $('calendar').fullCalendar ({
我有两个链接的鼠标事件: $('body > form').on("mousedown", function(e){ //Do stuff }).on("mouseup", function(
这是我的代码: $( '#Example' ).on( "keypress", function( keyEvent ) { if ( keyEvent.which != 44 ) {
我尝试了 dragOver 事件处理程序,但它没有正常工作。 我正在研究钢琴,我希望能够弹奏音符,即使那个键上没有发生鼠标按下。 是否有事件处理程序? 下面是我正在制作的钢琴的图片。 最佳答案 您应该
当悬停在相邻文本上时,我需要使隐藏按钮可见。这是通过 onMouseEnter 和 onMouseLeave 事件完成的。但是当点击另外的文本时,我需要使按钮完全可见并停止 onMouseLeave
我有ul标签内 div标签。我申请了mouseup事件 div标记和 click事件 ul标签。 问题 每当我点击 ul标签,然后都是 mouseup和 click事件被触发。 我想要的是当我点击 u
我是 Javascript 和 jQuery 的新手,所以我有一个非常愚蠢的疑问,请耐心等待 $(document).click(function () { alert("!"); v
我有一个邮政编码解析器,我正在使用 keyup 事件处理程序来跟踪输入长度何时达到 5,然后查询服务器以解析邮政编码。但是我想防止脚本被不必要地调用,所以我想知道是否有一种方法可以跟踪 keydown
使用事件 API,我有以下代码来发布带有事件照片的事件 $facebook = new Facebook(array( "appId" => "XXX", "se
首次加载 Microsoft Word 时,既不会触发 NewDocument 事件也不会触发 DocumentOpen 事件。当 Word 实例已打开并打开新文档或现有文档时,这些事件会正常触发。
我发现了很多相关问题(这里和其他地方),但还没有具体找到这个问题。 我正在尝试监听箭头键 (37-40) 的按键事件,但是当以特定顺序使用箭头键时,后续箭头不会生成“按键”事件。 例子: http:/
给定的 HTML: 和 JavaScript 的: var $test = $('#test'); $test.on('keydown', function(event) { if (eve
我是 Node.js 的新手,希望使用流运行程序。对于其他程序,我必须同时启动一个服务器(mongodb、redis 等),但我不知道我是否应该用这个运行一个服务器。请让我知道我哪里出了问题以及如何纠
我正在尝试使用 Swift 和 Cocoa 创建一个适用于 OS X 的应用程序。我希望应用程序能够响应关键事件,而不将焦点放在文本字段上/文本字段中。我在 Xcode 中创建了一个带有 Storyb
我有以下代码: (function(w,d,s,l,i){ w[l]=w[l]||[];w[l].push({
我是一名优秀的程序员,十分优秀!